From da0625dc90dc9276645012cc3e7596a195011877 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Wed, 14 Dec 2022 20:07:38 -0800 Subject: [PATCH] Add recently played query --- .../home/queries/recently-played-query.ts | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 packages/renderer/src/features/home/queries/recently-played-query.ts diff --git a/packages/renderer/src/features/home/queries/recently-played-query.ts b/packages/renderer/src/features/home/queries/recently-played-query.ts new file mode 100644 index 000000000..4ab95b9a3 --- /dev/null +++ b/packages/renderer/src/features/home/queries/recently-played-query.ts @@ -0,0 +1,54 @@ +import { useQuery } from '@tanstack/react-query'; +import { useCallback } from 'react'; +import { api } from '/@/api'; +import { ndNormalize } from '/@/api/navidrome.api'; +import type { NDAlbum } from '/@/api/navidrome.types'; +import { queryKeys } from '/@/api/query-keys'; +import type { AlbumListQuery, RawAlbumListResponse } from '/@/api/types'; +import { AlbumListSort, SortOrder } from '/@/api/types'; +import type { QueryOptions } from '/@/lib/react-query'; +import { useCurrentServer } from '/@/store'; + +export const useRecentlyPlayed = (query: Partial, options?: QueryOptions) => { + const server = useCurrentServer(); + + const requestQuery: AlbumListQuery = { + limit: 5, + sortBy: AlbumListSort.RECENTLY_PLAYED, + sortOrder: SortOrder.ASC, + startIndex: 0, + ...query, + }; + + return useQuery({ + queryFn: ({ signal }) => + api.controller.getAlbumList({ + query: requestQuery, + server, + signal, + }), + queryKey: queryKeys.albums.list(server?.id || '', requestQuery), + select: useCallback( + (data: RawAlbumListResponse | undefined) => { + let albums; + switch (server?.type) { + case 'jellyfin': + break; + case 'navidrome': + albums = data?.items.map((item) => ndNormalize.album(item as NDAlbum, server)); + break; + case 'subsonic': + break; + } + + return { + items: albums, + startIndex: data?.startIndex, + totalRecordCount: data?.totalRecordCount, + }; + }, + [server], + ), + ...options, + }); +};