Update song list queries
This commit is contained in:
parent
2b0d4c44a6
commit
c7f588539d
4 changed files with 21 additions and 4 deletions
|
@ -290,16 +290,29 @@ const getAlbumList = async (args: AlbumListArgs): Promise<JFAlbumList> => {
|
||||||
const getSongList = async (args: SongListArgs): Promise<JFSongList> => {
|
const getSongList = async (args: SongListArgs): Promise<JFSongList> => {
|
||||||
const { query, server, signal } = args;
|
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',
|
fields: 'Genres, DateCreated, MediaSources, ParentId',
|
||||||
includeItemTypes: 'Audio',
|
includeItemTypes: 'Audio',
|
||||||
limit: query.limit,
|
limit: query.limit,
|
||||||
parentId: query.musicFolderId,
|
parentId: query.musicFolderId,
|
||||||
recursive: true,
|
recursive: true,
|
||||||
|
searchTerm: query.searchTerm,
|
||||||
sortBy: songListSortMap.jellyfin[query.sortBy],
|
sortBy: songListSortMap.jellyfin[query.sortBy],
|
||||||
sortOrder: sortOrderMap.jellyfin[query.sortOrder],
|
sortOrder: sortOrderMap.jellyfin[query.sortOrder],
|
||||||
startIndex: query.startIndex,
|
startIndex: query.startIndex,
|
||||||
...query.jfParams,
|
...query.jfParams,
|
||||||
|
maxYear: undefined,
|
||||||
|
minYear: undefined,
|
||||||
|
years: yearsFilter,
|
||||||
};
|
};
|
||||||
|
|
||||||
const data = await api
|
const data = await api
|
||||||
|
|
|
@ -528,6 +528,7 @@ export enum JFSongListSort {
|
||||||
|
|
||||||
export type JFSongListParams = {
|
export type JFSongListParams = {
|
||||||
filters?: string;
|
filters?: string;
|
||||||
|
genreIds?: string;
|
||||||
genres?: string;
|
genres?: string;
|
||||||
includeItemTypes: 'Audio';
|
includeItemTypes: 'Audio';
|
||||||
searchTerm?: string;
|
searchTerm?: string;
|
||||||
|
|
|
@ -237,13 +237,14 @@ const getSongList = async (args: SongListArgs): Promise<NDSongList> => {
|
||||||
_order: sortOrderMap.navidrome[query.sortOrder],
|
_order: sortOrderMap.navidrome[query.sortOrder],
|
||||||
_sort: songListSortMap.navidrome[query.sortBy],
|
_sort: songListSortMap.navidrome[query.sortBy],
|
||||||
_start: query.startIndex,
|
_start: query.startIndex,
|
||||||
|
title: query.searchTerm,
|
||||||
...query.ndParams,
|
...query.ndParams,
|
||||||
};
|
};
|
||||||
|
|
||||||
const res = await api.get('api/song', {
|
const res = await api.get('api/song', {
|
||||||
headers: { 'x-nd-authorization': `Bearer ${server?.ndCredential}` },
|
headers: { 'x-nd-authorization': `Bearer ${server?.ndCredential}` },
|
||||||
prefixUrl: server?.url,
|
prefixUrl: server?.url,
|
||||||
searchParams,
|
searchParams: parseSearchParams(searchParams),
|
||||||
signal,
|
signal,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -419,10 +419,12 @@ export enum SongListSort {
|
||||||
export type SongListQuery = {
|
export type SongListQuery = {
|
||||||
jfParams?: {
|
jfParams?: {
|
||||||
filters?: string;
|
filters?: string;
|
||||||
|
genreIds?: string;
|
||||||
genres?: string;
|
genres?: string;
|
||||||
includeItemTypes: 'Audio';
|
includeItemTypes: 'Audio';
|
||||||
maxYear?: number;
|
isFavorite?: boolean;
|
||||||
minYear?: number;
|
maxYear?: number; // Parses to years
|
||||||
|
minYear?: number; // Parses to years
|
||||||
sortBy?: JFSongListSort;
|
sortBy?: JFSongListSort;
|
||||||
years?: string;
|
years?: string;
|
||||||
};
|
};
|
||||||
|
|
Reference in a new issue