diff --git a/src/renderer/api/query-keys.ts b/src/renderer/api/query-keys.ts index b22b59304..87120df64 100644 --- a/src/renderer/api/query-keys.ts +++ b/src/renderer/api/query-keys.ts @@ -270,6 +270,10 @@ export const queryKeys: Record< }, root: (serverId: string) => [serverId, 'genres'] as const, }, + musicbrainz: { + artist: (mbzArtistId: string) => ['musicbrainz', 'artist', mbzArtistId] as const, + root: () => ['musicbrainz'] as const, + }, musicFolders: { list: (serverId: string) => [serverId, 'musicFolders', 'list'] as const, }, diff --git a/src/renderer/features/musicbrainz/api/musicbrainz-api.ts b/src/renderer/features/musicbrainz/api/musicbrainz-api.ts new file mode 100644 index 000000000..d8c2238b1 --- /dev/null +++ b/src/renderer/features/musicbrainz/api/musicbrainz-api.ts @@ -0,0 +1,33 @@ +import { queryOptions } from '@tanstack/react-query'; +import { MusicBrainzApi } from 'musicbrainz-api'; + +import packageJson from '../../../../../package.json'; + +import { queryKeys } from '/@/renderer/api/query-keys'; + +export const musicbrainzApi = new MusicBrainzApi({ + appContactInfo: packageJson.homepage, + appName: packageJson.name, + appVersion: packageJson.version, +}); + +// Cache all musicbrainz api results for 5 minutes +const CACHE_TIME = 1000 * 60 * 5; + +export const musicbrainzQueries = { + artist: (args: { mbzArtistId: string }) => { + return queryOptions({ + gcTime: CACHE_TIME, + queryFn: () => + musicbrainzApi.lookup('artist', args.mbzArtistId, [ + 'releases', + 'recordings', + 'release-groups', + 'works', + 'media', + ]), + queryKey: queryKeys.musicbrainz.artist(args.mbzArtistId), + staleTime: CACHE_TIME, + }); + }, +};