Add lyric search functions and query

This commit is contained in:
jeffvli 2023-06-08 03:40:34 -07:00 committed by Jeff
parent 43c11ab6e3
commit 0fa5b6496f
7 changed files with 210 additions and 23 deletions

View file

@ -15,6 +15,7 @@ import type {
SongDetailQuery,
RandomSongListQuery,
LyricsQuery,
LyricSearchQuery,
} from './types';
export const queryKeys: Record<
@ -107,6 +108,10 @@ export const queryKeys: Record<
if (query) return [serverId, 'song', 'lyrics', query] as const;
return [serverId, 'song', 'lyrics'] as const;
},
lyricsSearch: (query?: LyricSearchQuery) => {
if (query) return ['lyrics', 'search', query] as const;
return ['lyrics', 'search'] as const;
},
randomSongList: (serverId: string, query?: RandomSongListQuery) => {
if (query) return [serverId, 'songs', 'randomSongList', query] as const;
return [serverId, 'songs', 'randomSongList'] as const;

View file

@ -1036,6 +1036,13 @@ export type InternetProviderLyricResponse = {
source: string;
};
export type InternetProviderLyricSearchResponse = {
artist: string;
id: string;
name: string;
source: string;
};
export type SynchronizedLyricMetadata = {
lyrics: SynchronizedLyricsArray;
remote: boolean;
@ -1053,3 +1060,8 @@ export type LyricOverride = Omit<InternetProviderLyricResponse, 'lyrics'>;
export const instanceOfCancellationError = (error: any) => {
return 'revert' in error;
};
export type LyricSearchQuery = {
artist: string;
name: string;
};

View file

@ -0,0 +1,20 @@
import { useQuery } from '@tanstack/react-query';
import isElectron from 'is-electron';
import { queryKeys } from '/@/renderer/api/query-keys';
import { InternetProviderLyricSearchResponse, LyricSearchQuery } from '/@/renderer/api/types';
import { QueryHookArgs } from '/@/renderer/lib/react-query';
import { LyricSource } from '/@/renderer/types';
const lyricsIpc = isElectron() ? window.electron.lyrics : null;
export const useLyricSearch = (args: Omit<QueryHookArgs<LyricSearchQuery>, 'serverId'>) => {
const { options, query } = args;
return useQuery<Record<LyricSource, InternetProviderLyricSearchResponse[]>>({
cacheTime: 1000 * 60 * 1,
queryFn: () => lyricsIpc?.searchRemoteLyrics(query),
queryKey: queryKeys.songs.lyricsSearch(query),
staleTime: 1000 * 60 * 1,
...options,
});
};