From c7f588539d7d123803e4b2e269a791ddb2cfecbc Mon Sep 17 00:00:00 2001 From: jeffvli Date: Tue, 27 Dec 2022 13:20:22 -0800 Subject: [PATCH] Update song list queries --- src/renderer/api/jellyfin.api.ts | 15 ++++++++++++++- src/renderer/api/jellyfin.types.ts | 1 + src/renderer/api/navidrome.api.ts | 3 ++- src/renderer/api/types.ts | 6 ++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/renderer/api/jellyfin.api.ts b/src/renderer/api/jellyfin.api.ts index f7c9b95a..c828f3dd 100644 --- a/src/renderer/api/jellyfin.api.ts +++ b/src/renderer/api/jellyfin.api.ts @@ -290,16 +290,29 @@ const getAlbumList = async (args: AlbumListArgs): Promise => { const getSongList = async (args: SongListArgs): Promise => { const { query, server, signal } = args; - const searchParams: JFSongListParams = { + const yearsGroup = []; + if (query.jfParams?.minYear && query.jfParams?.maxYear) { + for (let i = Number(query.jfParams.minYear); i <= Number(query.jfParams.maxYear); i += 1) { + yearsGroup.push(String(i)); + } + } + + const yearsFilter = yearsGroup.length ? yearsGroup.join(',') : undefined; + + const searchParams: JFSongListParams & { maxYear?: number; minYear?: number } = { fields: 'Genres, DateCreated, MediaSources, ParentId', includeItemTypes: 'Audio', limit: query.limit, parentId: query.musicFolderId, recursive: true, + searchTerm: query.searchTerm, sortBy: songListSortMap.jellyfin[query.sortBy], sortOrder: sortOrderMap.jellyfin[query.sortOrder], startIndex: query.startIndex, ...query.jfParams, + maxYear: undefined, + minYear: undefined, + years: yearsFilter, }; const data = await api diff --git a/src/renderer/api/jellyfin.types.ts b/src/renderer/api/jellyfin.types.ts index 0e114fa4..aa2ad55a 100644 --- a/src/renderer/api/jellyfin.types.ts +++ b/src/renderer/api/jellyfin.types.ts @@ -528,6 +528,7 @@ export enum JFSongListSort { export type JFSongListParams = { filters?: string; + genreIds?: string; genres?: string; includeItemTypes: 'Audio'; searchTerm?: string; diff --git a/src/renderer/api/navidrome.api.ts b/src/renderer/api/navidrome.api.ts index ac3811ac..4eb75028 100644 --- a/src/renderer/api/navidrome.api.ts +++ b/src/renderer/api/navidrome.api.ts @@ -237,13 +237,14 @@ const getSongList = async (args: SongListArgs): Promise => { _order: sortOrderMap.navidrome[query.sortOrder], _sort: songListSortMap.navidrome[query.sortBy], _start: query.startIndex, + title: query.searchTerm, ...query.ndParams, }; const res = await api.get('api/song', { headers: { 'x-nd-authorization': `Bearer ${server?.ndCredential}` }, prefixUrl: server?.url, - searchParams, + searchParams: parseSearchParams(searchParams), signal, }); diff --git a/src/renderer/api/types.ts b/src/renderer/api/types.ts index 90b89975..f070b1b1 100644 --- a/src/renderer/api/types.ts +++ b/src/renderer/api/types.ts @@ -419,10 +419,12 @@ export enum SongListSort { export type SongListQuery = { jfParams?: { filters?: string; + genreIds?: string; genres?: string; includeItemTypes: 'Audio'; - maxYear?: number; - minYear?: number; + isFavorite?: boolean; + maxYear?: number; // Parses to years + minYear?: number; // Parses to years sortBy?: JFSongListSort; years?: string; };