From 2df96c0d3199937cbebcd961cbe2335d7aa707cf Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sat, 7 Jan 2023 03:26:18 -0800 Subject: [PATCH] Add song filter as add queue type --- .../player/hooks/use-handle-playqueue-add.ts | 90 ++++++++++++++++--- src/renderer/types.ts | 2 +- 2 files changed, 78 insertions(+), 14 deletions(-) diff --git a/src/renderer/features/player/hooks/use-handle-playqueue-add.ts b/src/renderer/features/player/hooks/use-handle-playqueue-add.ts index 91905901..f2cf6b5e 100644 --- a/src/renderer/features/player/hooks/use-handle-playqueue-add.ts +++ b/src/renderer/features/player/hooks/use-handle-playqueue-add.ts @@ -33,11 +33,25 @@ export const useHandlePlayQueueAdd = () => { if (!server) return toast.error({ message: 'No server selected', type: 'error' }); let songs = null; + // const itemCount = options.byItemType?.id?.length || 0; + // const fetchId = itemCount > 1 ? nanoid() : null; + if (options.byItemType) { let songsList; let queryFilter: any; let queryKey: any; + if (options.byItemType.type === LibraryItem.PLAYLIST) { + // if (fetchId) { + // toast.success({ + // autoClose: false, + // id: fetchId, + // loading: true, + // message: `This may take a while...`, + // title: `Adding ${itemCount} albums to the queue`, + // }); + // } + queryFilter = { id: options.byItemType?.id || [], sortBy: 'id', @@ -51,6 +65,16 @@ export const useHandlePlayQueueAdd = () => { queryFilter, ); } else if (options.byItemType.type === LibraryItem.ALBUM) { + // if (fetchId) { + // toast.success({ + // autoClose: false, + // id: fetchId, + // loading: true, + // message: `This may take a while...`, + // title: `Adding ${itemCount} albums to the queue`, + // }); + // } + queryFilter = { albumIds: options.byItemType?.id || [], sortBy: SongListSort.ALBUM, @@ -60,32 +84,57 @@ export const useHandlePlayQueueAdd = () => { queryKey = queryKeys.songs.list(server?.id, queryFilter); } else if (options.byItemType.type === LibraryItem.ALBUM_ARTIST) { + // if (fetchId) { + // toast.success({ + // autoClose: false, + // id: fetchId, + // loading: true, + // message: `This may take a while...`, + // title: `Adding ${itemCount} album artists to the queue`, + // }); + // } + queryFilter = { artistIds: options.byItemType?.id || [], - sortBy: SongListSort.ALBUM, + sortBy: SongListSort.ALBUM_ARTIST, sortOrder: SortOrder.ASC, startIndex: 0, }; + queryKey = queryKeys.songs.list(server?.id, queryFilter); + } else if (options.byItemType.type === LibraryItem.SONG) { + queryFilter = options.byItemType.id; queryKey = queryKeys.songs.list(server?.id, queryFilter); } try { if (options.byItemType?.type === LibraryItem.PLAYLIST) { - songsList = await queryClient.fetchQuery(queryKey, async ({ signal }) => - api.controller.getPlaylistSongList({ - query: queryFilter, - server, - signal, - }), + songsList = await queryClient.fetchQuery( + queryKey, + async ({ signal }) => + api.controller.getPlaylistSongList({ + query: queryFilter, + server, + signal, + }), + { + cacheTime: 1000 * 60, + staleTime: 1000 * 60, + }, ); } else { - songsList = await queryClient.fetchQuery(queryKey, async ({ signal }) => - api.controller.getSongList({ - query: queryFilter, - server, - signal, - }), + songsList = await queryClient.fetchQuery( + queryKey, + async ({ signal }) => + api.controller.getSongList({ + query: queryFilter, + server, + signal, + }), + { + cacheTime: 1000 * 60, + staleTime: 1000 * 60, + }, ); } } catch (err: any) { @@ -134,6 +183,21 @@ export const useHandlePlayQueueAdd = () => { play(); } + // if (fetchId) { + // toast.update({ + // autoClose: 1000, + // id: fetchId, + // message: '', + // title: `Added ${songs.length} items to the queue`, + // }); + // // toast.hide(fetchId); + // } else { + // toast.success({ + // // message: 'Success', + // title: `Added ${songs.length} items to the queue`, + // }); + // } + return null; }, [deviceId, play, playerType, queryClient, server], diff --git a/src/renderer/types.ts b/src/renderer/types.ts index 30a42f73..476cf54c 100644 --- a/src/renderer/types.ts +++ b/src/renderer/types.ts @@ -151,7 +151,7 @@ export enum TableColumn { export type PlayQueueAddOptions = { byData?: QueueSong[]; byItemType?: { - id: string[]; + id: string[] | any; type: LibraryItem; }; play: Play;