Skip to content

Commit c818a3f

Browse files
authored
Merge pull request #3223 from metabrainz/fix-cover-art-fallback
Fix fallback to release-group cover art
2 parents 3c7b90c + 6df83dc commit c818a3f

File tree

4 files changed

+46
-41
lines changed

4 files changed

+46
-41
lines changed

frontend/js/src/common/brainzplayer/MusicPlayer.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,7 @@ function MusicPlayer(props: MusicPlayerProps) {
221221
track: BrainzPlayerQueueItem,
222222
setCoverArt: React.Dispatch<React.SetStateAction<string>>
223223
) => {
224-
const coverArt = await getAlbumArtFromListenMetadata(
225-
track,
226-
spotifyAuth,
227-
APIService
228-
);
224+
const coverArt = await getAlbumArtFromListenMetadata(track, spotifyAuth);
229225
setCoverArt(coverArt ?? "");
230226
};
231227

frontend/js/src/common/listens/ListenCard.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -785,8 +785,7 @@ export default function ListenCardWrapper(props: ListenCardProps) {
785785
try {
786786
const albumArtURL = await getAlbumArtFromListenMetadata(
787787
listen,
788-
spotifyAuth,
789-
APIService
788+
spotifyAuth
790789
);
791790
return albumArtURL ?? "";
792791
} catch (error) {

frontend/js/src/explore/fresh-releases/components/ReleaseCard.tsx

+2-4
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,11 @@ export default function ReleaseCard(props: ReleaseCardProps) {
122122
React.useEffect(() => {
123123
async function getCoverArt() {
124124
let coverartURL;
125-
if (releaseMBID) {
125+
if (releaseMBID || releaseGroupMBID) {
126126
coverartURL = await getAlbumArtFromReleaseMBID(
127127
releaseMBID,
128-
releaseGroupMBID ?? true
128+
releaseGroupMBID
129129
);
130-
} else if (releaseGroupMBID) {
131-
coverartURL = await getAlbumArtFromReleaseGroupMBID(releaseGroupMBID);
132130
}
133131
if (coverartURL) {
134132
setCoverartSrc(coverartURL);

frontend/js/src/utils/utils.tsx

+42-30
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { getCoverArtCache, setCoverArtCache } from "./coverArtCache";
1919
const originalFetch = window.fetch;
2020
const fetchWithRetry = require("fetch-retry")(originalFetch);
2121

22+
let APIServiceInstance = new APIServiceClass(`${window.location.origin}/1`);
23+
2224
const searchForSpotifyTrack = async (
2325
spotifyToken?: string,
2426
trackName?: string,
@@ -611,6 +613,7 @@ const getPageProps = async (): Promise<{
611613
const apiService = new APIServiceClass(
612614
api_url || `${window.location.origin}/1`
613615
);
616+
APIServiceInstance = apiService;
614617
globalAppContext = {
615618
APIService: apiService,
616619
websocketsUrl: websockets_url,
@@ -799,44 +802,53 @@ const getAlbumArtFromReleaseGroupMBID = async (
799802
};
800803

801804
const getAlbumArtFromReleaseMBID = async (
802-
userSubmittedReleaseMBID: string,
803-
useReleaseGroupFallback: boolean | string = false,
804-
APIService?: APIServiceClass,
805+
userSubmittedReleaseMBID: string | undefined | null,
806+
userSubmittedReleaseGroupMBID: string | undefined | null,
805807
optionalSize?: CAAThumbnailSizes,
806808
frontOnly?: boolean
807809
): Promise<string | undefined> => {
808810
try {
809811
// Check cache first
810-
const cacheKey = `ca:${userSubmittedReleaseMBID}-${optionalSize}-${useReleaseGroupFallback}`;
812+
const cacheKey = `ca:${userSubmittedReleaseMBID}-${optionalSize}-${userSubmittedReleaseGroupMBID}`;
811813
const cachedCoverArt = await getCoverArtCache(cacheKey);
812814
if (cachedCoverArt) {
813815
return cachedCoverArt;
814816
}
815-
816-
const CAAResponse = await fetchWithRetry(
817-
`https://coverartarchive.org/release/${userSubmittedReleaseMBID}`,
818-
retryParams
819-
);
820-
if (CAAResponse.ok) {
821-
const body: CoverArtArchiveResponse = await CAAResponse.json();
822-
const coverArt = getThumbnailFromCAAResponse(
823-
body,
824-
optionalSize,
825-
frontOnly
817+
if (userSubmittedReleaseMBID) {
818+
const CAAResponse = await fetchWithRetry(
819+
`https://coverartarchive.org/release/${userSubmittedReleaseMBID}`,
820+
retryParams
826821
);
827-
// Here, make sure there is a front image, otherwise discard the hit.
828-
if (coverArt) {
829-
// Cache the successful result
830-
await setCoverArtCache(cacheKey, coverArt);
822+
if (CAAResponse.ok) {
823+
const body: CoverArtArchiveResponse = await CAAResponse.json();
824+
const coverArt = getThumbnailFromCAAResponse(
825+
body,
826+
optionalSize,
827+
frontOnly
828+
);
829+
// Here, make sure there is a front image, otherwise discard the hit.
830+
if (coverArt) {
831+
// Cache the successful result
832+
await setCoverArtCache(cacheKey, coverArt);
833+
}
834+
return coverArt;
831835
}
832-
return coverArt;
833836
}
834837

835-
if (useReleaseGroupFallback) {
836-
let releaseGroupMBID = useReleaseGroupFallback;
837-
if (!_.isString(useReleaseGroupFallback) && APIService) {
838-
const releaseGroupResponse = (await APIService.lookupMBRelease(
839-
userSubmittedReleaseMBID
838+
/*
839+
Fallback to fetching cover art for the Release Group.
840+
If no RG MBID is available, first hit the MusicBrainz API
841+
with the release MBID to get the RG MBID
842+
*/
843+
if (userSubmittedReleaseMBID || userSubmittedReleaseGroupMBID) {
844+
let releaseGroupMBID = userSubmittedReleaseGroupMBID;
845+
if (
846+
!_.isString(userSubmittedReleaseGroupMBID) &&
847+
_.isString(userSubmittedReleaseMBID)
848+
) {
849+
const releaseGroupResponse = (await APIServiceInstance.lookupMBRelease(
850+
userSubmittedReleaseMBID,
851+
"release-groups"
840852
)) as MusicBrainzRelease & WithReleaseGroup;
841853
releaseGroupMBID = releaseGroupResponse["release-group"].id;
842854
}
@@ -914,8 +926,7 @@ const getAlbumArtFromListenMetadataKey = (
914926

915927
const getAlbumArtFromListenMetadata = async (
916928
listen: BaseListenFormat,
917-
spotifyUser?: SpotifyUser,
918-
APIService?: APIServiceClass
929+
spotifyUser?: SpotifyUser
919930
): Promise<string | undefined> => {
920931
if (!listen) {
921932
return undefined;
@@ -939,16 +950,17 @@ const getAlbumArtFromListenMetadata = async (
939950
const userSubmittedReleaseMBID =
940951
listen.track_metadata?.release_mbid ??
941952
listen.track_metadata?.additional_info?.release_mbid;
953+
const userSubmittedReleaseGroupMBID =
954+
listen.track_metadata?.additional_info?.release_group_mbid;
942955
const caaId = listen.track_metadata?.mbid_mapping?.caa_id;
943956
const caaReleaseMbid = listen.track_metadata?.mbid_mapping?.caa_release_mbid;
944-
if (userSubmittedReleaseMBID) {
957+
if (userSubmittedReleaseMBID || userSubmittedReleaseGroupMBID) {
945958
// try getting the cover art using user submitted release mbid. if user submitted release mbid
946959
// does not have a cover art and the mapper matched to a different release, try to fallback to
947960
// release group cover art of the user submitted release mbid next
948961
const userSubmittedReleaseAlbumArt = await getAlbumArtFromReleaseMBID(
949962
userSubmittedReleaseMBID,
950-
Boolean(caaReleaseMbid) && userSubmittedReleaseMBID !== caaReleaseMbid,
951-
APIService,
963+
userSubmittedReleaseGroupMBID,
952964
undefined,
953965
true // we only want front images, otherwise skip
954966
);

0 commit comments

Comments
 (0)