diff --git a/src/backend/common/vendor/LastfmApiClient.ts b/src/backend/common/vendor/LastfmApiClient.ts index 5803efaa..cdf8242b 100644 --- a/src/backend/common/vendor/LastfmApiClient.ts +++ b/src/backend/common/vendor/LastfmApiClient.ts @@ -746,6 +746,7 @@ export const formatPlayObj = (obj: LastFMTrackObject, options: FormatPlayObjectO mbid: artistMbid, }, name: title, + image, album: { '#text': album, mbid: albumMbid, @@ -792,6 +793,27 @@ export const formatPlayObj = (obj: LastFMTrackObject, options: FormatPlayObjectO } } + if(brainz !== undefined && !objectIsEmpty(brainz)) { + play.data.meta = { + brainz + } + } + + const i = image ?? []; + let imageSizeNum: number = 0; + let imageUrl: string | undefined = undefined; + if(i !== undefined && i !== null && i.length > 0) { + for(const im of i) { + const res = lastfmImageSize.safeParse(im.size); + if(res.success && lastfmImageSizeMap[res.data] > imageSizeNum) { + imageSizeNum = lastfmImageSizeMap[res.data]; + imageUrl = im["#text"]; + } + } + } + if(imageUrl !== undefined) { + play.album.image = imageUrl; + } return baseFormatPlayObj(obj, play); } @@ -828,6 +850,15 @@ type LastFMTrackScrobbleResponse = Readonly<{ }; }>; +const lastfmImageSize = z.enum(['small','medium','large','extralarge']); +type LastFmImageSizes = z.infer; +const lastfmImageSizeMap: Record = { + small: 1, + medium: 2, + large: 3, + extralarge: 4 +} as const; + export type LastFMTrackObject = { artist: { mbid?: string;