Support album and artist detail pages for subsonic

This commit is contained in:
jeffvli
2023-12-05 19:04:16 -08:00
parent 3c691d23d9
commit 18ec50b2a3
5 changed files with 46 additions and 0 deletions
@@ -333,6 +333,7 @@ const getAlbumList = async (args: AlbumListArgs): Promise<AlbumListResponse> =>
AlbumArtistIds: query.artistIds
? formatCommaDelimitedString(query.artistIds)
: undefined,
ContributingArtistIds: query.isCompilation ? query.artistIds?.[0] : undefined,
IncludeItemTypes: 'MusicAlbum',
Limit: query.limit,
ParentId: query.musicFolderId,
@@ -233,6 +233,8 @@ const getAlbumList = async (args: AlbumListArgs): Promise<AlbumListResponse> =>
_sort: albumListSortMap.navidrome[query.sortBy],
_start: query.startIndex,
artist_id: query.artistIds?.[0],
compilation: query.isCompilation,
genre_id: query.genre,
name: query.searchTerm,
...query._custom?.navidrome,
},
@@ -332,6 +332,45 @@ export const SubsonicController: ControllerEndpoint = {
[AlbumListSort.SONG_COUNT]: undefined,
};
if (query.isCompilation) {
return {
items: [],
startIndex: 0,
totalRecordCount: 0,
};
}
if (query.artistIds) {
const promises = [];
for (const artistId of query.artistIds) {
promises.push(
subsonicApiClient(apiClientProps).getArtist({
query: {
id: artistId,
},
}),
);
}
const artistResult = await Promise.all(promises);
const albums = artistResult.flatMap((artist) => {
if (artist.status !== 200) {
fsLog.warn('Failed to get artist detail', { context: { artist } });
return [];
}
return artist.body['subsonic-response'].artist.album;
});
return {
items: albums.map((album) => subsonicNormalize.album(album, apiClientProps.server)),
startIndex: 0,
totalRecordCount: albums.length,
};
}
const res = await subsonicApiClient(apiClientProps).getAlbumList2({
query: {
fromYear: query.minYear,
+1
View File
@@ -377,6 +377,7 @@ export type AlbumListQuery = {
};
artistIds?: string[];
genre?: string;
isCompilation?: boolean;
limit?: number;
maxYear?: number;
minYear?: number;
@@ -100,6 +100,7 @@ export const AlbumArtistDetailContent = ({ background }: AlbumArtistDetailConten
: undefined),
},
},
artistIds: [albumArtistId],
limit: 15,
sortBy: AlbumListSort.RELEASE_DATE,
sortOrder: SortOrder.DESC,
@@ -122,6 +123,8 @@ export const AlbumArtistDetailContent = ({ background }: AlbumArtistDetailConten
: undefined),
},
},
artistIds: [albumArtistId],
isCompilation: true,
limit: 15,
sortBy: AlbumListSort.RELEASE_DATE,
sortOrder: SortOrder.DESC,