reimplement genre detail route

This commit is contained in:
jeffvli
2025-11-24 20:19:09 -08:00
parent eba485034a
commit d3132ad570
30 changed files with 443 additions and 190 deletions
@@ -208,7 +208,7 @@ export const JellyfinController: InternalControllerEndpoint = {
Fields: 'Genres, DateCreated, ExternalUrls, Overview',
ImageTypeLimit: 1,
Limit: query.limit,
ParentId: query.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SearchTerm: query.searchTerm,
SortBy: albumArtistListSortMap.jellyfin[query.sortBy] || 'SortName,Name',
@@ -316,11 +316,11 @@ export const JellyfinController: InternalControllerEndpoint = {
query: {
...artistQuery,
Fields: 'People, Tags',
GenreIds: query.genres ? query.genres.join(',') : undefined,
GenreIds: query.genreIds ? query.genreIds.join(',') : undefined,
IncludeItemTypes: 'MusicAlbum',
IsFavorite: query.favorite,
Limit: query.limit,
ParentId: query.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SearchTerm: query.searchTerm,
SortBy: albumListSortMap.jellyfin[query.sortBy] || 'SortName',
@@ -354,7 +354,7 @@ export const JellyfinController: InternalControllerEndpoint = {
Fields: 'Genres, DateCreated, ExternalUrls, Overview',
ImageTypeLimit: 1,
Limit: query.limit,
ParentId: query.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SearchTerm: query.searchTerm,
SortBy: albumArtistListSortMap.jellyfin[query.sortBy] || 'SortName,Name',
@@ -398,7 +398,7 @@ export const JellyfinController: InternalControllerEndpoint = {
EnableTotalRecordCount: true,
Fields: 'ItemCounts',
Limit: query.limit,
ParentId: query?.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SearchTerm: query?.searchTerm,
SortBy: genreListSortMap.jellyfin[query.sortBy] || 'SortName',
@@ -588,7 +588,7 @@ export const JellyfinController: InternalControllerEndpoint = {
? true
: undefined,
Limit: query.limit,
ParentId: query.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SortBy: JFSongListSort.RANDOM,
SortOrder: JFSortOrder.ASC,
@@ -742,7 +742,7 @@ export const JellyfinController: InternalControllerEndpoint = {
IncludeItemTypes: 'Audio',
IsFavorite: query.favorite,
Limit: query.limit,
ParentId: query.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SearchTerm: query.searchTerm,
SortBy: songListSortMap.jellyfin[query.sortBy] || 'Album,SortName',
@@ -777,7 +777,7 @@ export const JellyfinController: InternalControllerEndpoint = {
IncludeItemTypes: 'Audio',
IsFavorite: query.favorite,
Limit: query.limit,
ParentId: query.musicFolderId,
ParentId: getMusicFolderId(query.musicFolderId),
Recursive: true,
SearchTerm: query.searchTerm,
SortBy: songListSortMap.jellyfin[query.sortBy] || 'Album,SortName',
@@ -1160,3 +1160,7 @@ export const JellyfinController: InternalControllerEndpoint = {
// totalRecordCount: res.body.TotalRecordCount,
// };
// };
function getMusicFolderId(musicFolderId?: string | string[]) {
return Array.isArray(musicFolderId) ? musicFolderId[0] : musicFolderId;
}
@@ -284,8 +284,8 @@ export const NavidromeController: InternalControllerEndpoint = {
const { apiClientProps, query } = args;
const genres = hasFeature(apiClientProps.server, ServerFeature.BFR)
? query.genres
: query.genres?.[0];
? query.genreIds
: query.genreIds?.[0];
const res = await ndApiClient(apiClientProps).getAlbumList({
query: {
@@ -219,7 +219,7 @@ export const SubsonicController: InternalControllerEndpoint = {
const res = await ssApiClient(apiClientProps).getArtists({
query: {
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
},
});
@@ -340,7 +340,7 @@ export const SubsonicController: InternalControllerEndpoint = {
if (query.favorite) {
const res = await ssApiClient(apiClientProps).getStarred({
query: {
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
},
});
@@ -360,7 +360,7 @@ export const SubsonicController: InternalControllerEndpoint = {
};
}
if (query.genres?.length) {
if (query.genreIds?.length) {
type = AlbumListSortType.BY_GENRE;
}
@@ -397,8 +397,8 @@ export const SubsonicController: InternalControllerEndpoint = {
const res = await ssApiClient(apiClientProps).getAlbumList2({
query: {
fromYear,
genre: query.genres?.length ? query.genres[0] : undefined,
musicFolderId: query.musicFolderId,
genre: query.genreIds?.length ? query.genreIds[0] : undefined,
musicFolderId: getMusicFolderId(query.musicFolderId),
offset: query.startIndex,
size: query.limit,
toYear,
@@ -485,7 +485,7 @@ export const SubsonicController: InternalControllerEndpoint = {
if (query.favorite) {
const res = await ssApiClient(apiClientProps).getStarred({
query: {
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
},
});
@@ -502,7 +502,7 @@ export const SubsonicController: InternalControllerEndpoint = {
let startIndex = 0;
let totalRecordCount = 0;
if (query.genres?.length) {
if (query.genreIds?.length) {
type = AlbumListSortType.BY_GENRE;
}
@@ -530,8 +530,8 @@ export const SubsonicController: InternalControllerEndpoint = {
const res = await ssApiClient(apiClientProps).getAlbumList2({
query: {
fromYear,
genre: query.genres?.length ? query.genres[0] : undefined,
musicFolderId: query.musicFolderId,
genre: query.genreIds?.length ? query.genreIds[0] : undefined,
musicFolderId: getMusicFolderId(query.musicFolderId),
offset: startIndex,
size: MAX_SUBSONIC_ITEMS,
toYear,
@@ -567,7 +567,7 @@ export const SubsonicController: InternalControllerEndpoint = {
const res = await ssApiClient(apiClientProps).getArtists({
query: {
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
},
});
@@ -783,7 +783,7 @@ export const SubsonicController: InternalControllerEndpoint = {
query: {
fromYear: query.minYear,
genre: query.genre,
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
size: query.limit,
toYear: query.maxYear,
},
@@ -938,7 +938,7 @@ export const SubsonicController: InternalControllerEndpoint = {
query: {
count: query.limit,
genre: query.genreIds[0],
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
offset: query.startIndex,
},
});
@@ -959,7 +959,7 @@ export const SubsonicController: InternalControllerEndpoint = {
if (query.favorite) {
const res = await ssApiClient(apiClientProps).getStarred({
query: {
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
},
});
@@ -1127,7 +1127,7 @@ export const SubsonicController: InternalControllerEndpoint = {
query: {
count: 1,
genre: query.genreIds[0],
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
offset: sectionIndex,
},
});
@@ -1152,7 +1152,7 @@ export const SubsonicController: InternalControllerEndpoint = {
query: {
count: MAX_SUBSONIC_ITEMS,
genre: query.genreIds[0],
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
offset: startIndex,
},
});
@@ -1175,7 +1175,7 @@ export const SubsonicController: InternalControllerEndpoint = {
if (query.favorite) {
const res = await ssApiClient(apiClientProps).getStarred({
query: {
musicFolderId: query.musicFolderId,
musicFolderId: getMusicFolderId(query.musicFolderId),
},
});
@@ -1423,3 +1423,7 @@ export const SubsonicController: InternalControllerEndpoint = {
return null;
},
};
function getMusicFolderId(musicFolderId?: string | string[]) {
return Array.isArray(musicFolderId) ? musicFolderId[0] : musicFolderId;
}