handle favorite/update in similarArtists

This commit is contained in:
jeffvli
2025-12-28 03:43:59 -08:00
parent 66699b9572
commit 1a930021b6
9 changed files with 124 additions and 15 deletions
@@ -279,11 +279,11 @@ export const SubsonicController: InternalControllerEndpoint = {
}
return {
...ssNormalize.albumArtist(artist, apiClientProps.server, 300),
...ssNormalize.albumArtist(artist, apiClientProps.server),
albums: artist.album?.map((album) => ssNormalize.album(album, apiClientProps.server)),
similarArtists:
artistInfo?.similarArtist?.map((artist) =>
ssNormalize.albumArtist(artist, apiClientProps.server, 300),
ssNormalize.albumArtist(artist, apiClientProps.server),
) || null,
};
},
@@ -303,7 +303,7 @@ export const SubsonicController: InternalControllerEndpoint = {
const artists = (res.body.artists?.index || []).flatMap((index) => index.artist);
let results = artists.map((artist) =>
ssNormalize.albumArtist(artist, apiClientProps.server, 300),
ssNormalize.albumArtist(artist, apiClientProps.server),
);
if (query.searchTerm) {
@@ -488,7 +488,7 @@ export const SubsonicController: InternalControllerEndpoint = {
return {
items:
res.body.albumList2.album?.map((album) =>
ssNormalize.album(album, apiClientProps.server, 300),
ssNormalize.album(album, apiClientProps.server),
) || [],
startIndex: query.startIndex,
totalRecordCount: null,
@@ -658,7 +658,7 @@ export const SubsonicController: InternalControllerEndpoint = {
}
let results = artists.map((artist) =>
ssNormalize.albumArtist(artist, apiClientProps.server, 300),
ssNormalize.albumArtist(artist, apiClientProps.server),
);
if (query.searchTerm) {
@@ -506,8 +506,8 @@ const AlbumArtistMetadataSimilarArtists = ({
playCount: null,
similarArtists: null,
songCount: null,
userFavorite: false,
userRating: null,
userFavorite: relatedArtist.userFavorite,
userRating: relatedArtist.userRating,
}),
);
}, [detailQuery.data?.similarArtists, server?.type, serverId]);
@@ -215,13 +215,36 @@ export const applyFavoriteOptimisticUpdates = (
queryClient.setQueryData(
queryKey,
(prev: AlbumArtistDetailResponse | undefined) => {
if (prev && itemIdSet.has(prev.id)) {
if (!prev) {
return prev;
}
// Update the main artist if it matches
if (itemIdSet.has(prev.id)) {
return {
...prev,
userFavorite: isFavorite,
};
}
// Update similar artists if any match
if (prev.similarArtists && prev.similarArtists.length > 0) {
const hasMatchingSimilarArtist = prev.similarArtists.some(
(artist) => itemIdSet.has(artist.id),
);
if (hasMatchingSimilarArtist) {
return {
...prev,
similarArtists: prev.similarArtists.map((artist) =>
itemIdSet.has(artist.id)
? { ...artist, userFavorite: isFavorite }
: artist,
),
};
}
}
return prev;
},
);
@@ -184,9 +184,33 @@ export const applyRatingOptimisticUpdates = (
queryClient.setQueryData(
queryKey,
(prev: AlbumArtistDetailResponse | undefined) => {
if (prev && itemIdSet.has(prev.id)) {
if (!prev) {
return prev;
}
// Update the main artist if it matches
if (itemIdSet.has(prev.id)) {
return { ...prev, userRating: rating };
}
// Update similar artists if any match
if (prev.similarArtists && prev.similarArtists.length > 0) {
const hasMatchingSimilarArtist = prev.similarArtists.some(
(artist) => itemIdSet.has(artist.id),
);
if (hasMatchingSimilarArtist) {
return {
...prev,
similarArtists: prev.similarArtists.map((artist) =>
itemIdSet.has(artist.id)
? { ...artist, userRating: rating }
: artist,
),
};
}
}
return prev;
},
);