Adding favorites bits

This commit is contained in:
Violet Caulfield
2025-01-15 09:27:51 -06:00
parent 95f5432460
commit f0e636b484
10 changed files with 230 additions and 14 deletions
+34
View File
@@ -0,0 +1,34 @@
import { QueryKeys } from "@/enums/query-keys";
import { Api } from "@jellyfin/sdk";
import { useQuery } from "@tanstack/react-query";
import { fetchFavoriteAlbums, fetchFavoriteArtists, fetchFavoriteTracks } from "./functions/favorites";
export const useFavoriteArtists = (api: Api, libraryId: string) => useQuery({
queryKey: [QueryKeys.FavoriteArtists, api, libraryId],
queryFn: ({ queryKey }) => {
const api: Api = queryKey[1] as Api;
const libraryId : string = queryKey[2] as string;
return fetchFavoriteArtists(api, libraryId)
}
});
export const useFavoriteAlbums = (api: Api, libraryId: string) => useQuery({
queryKey: [QueryKeys.FavoriteAlbums, api, libraryId],
queryFn: ({ queryKey }) => {
const api: Api = queryKey[1] as Api;
const libraryId : string = queryKey[2] as string;
return fetchFavoriteAlbums(api, libraryId)
}
});
export const useFavoriteTracks = (api: Api, libraryId: string) => useQuery({
queryKey: [QueryKeys.FavoriteTracks, api, libraryId],
queryFn: ({ queryKey }) => {
const api: Api = queryKey[1] as Api;
const libraryId : string = queryKey[2] as string;
return fetchFavoriteTracks(api, libraryId)
}
});
+102
View File
@@ -0,0 +1,102 @@
import { Api } from "@jellyfin/sdk";
import { BaseItemDto, BaseItemKind, ItemSortBy, SortOrder } from "@jellyfin/sdk/lib/generated-client/models";
import { getItemsApi } from "@jellyfin/sdk/lib/utils/api";
export function fetchFavoriteArtists(api: Api, musicLibraryId: string): Promise<BaseItemDto[]> {
console.debug(`Fetching user's favorite artists`);
return new Promise(async (resolve, reject) => {
getItemsApi(api)
.getItems({
includeItemTypes: [
BaseItemKind.MusicArtist
],
isFavorite: true,
parentId: musicLibraryId,
recursive: true,
sortBy: [
ItemSortBy.SortName
],
sortOrder: [
SortOrder.Descending
]
})
.then((response) => {
console.debug(`Received favorite artist response`, response);
if (response.data.Items)
resolve(response.data.Items)
else
resolve([]);
}).catch((error) => {
console.error(error);
reject(error);
})
})
}
export function fetchFavoriteAlbums(api: Api, musicLibraryId: string): Promise<BaseItemDto[]> {
console.debug(`Fetching user's favorite albums`);
return new Promise(async (resolve, reject) => {
getItemsApi(api)
.getItems({
includeItemTypes: [
BaseItemKind.MusicAlbum
],
isFavorite: true,
parentId: musicLibraryId,
recursive: true,
sortBy: [
ItemSortBy.SortName
],
sortOrder: [
SortOrder.Descending
]
})
.then((response) => {
console.debug(`Received favorite album response`, response);
if (response.data.Items)
resolve(response.data.Items)
else
resolve([]);
}).catch((error) => {
console.error(error);
reject(error);
})
})
}
export function fetchFavoriteTracks(api: Api, musicLibraryId: string): Promise<BaseItemDto[]> {
console.debug(`Fetching user's favorite artists`);
return new Promise(async (resolve, reject) => {
getItemsApi(api)
.getItems({
includeItemTypes: [
BaseItemKind.Audio
],
isFavorite: true,
parentId: musicLibraryId,
recursive: true,
sortBy: [
ItemSortBy.SortName
],
sortOrder: [
SortOrder.Descending
]
})
.then((response) => {
console.debug(`Received favorite artist response`, response);
if (response.data.Items)
resolve(response.data.Items)
else
resolve([]);
}).catch((error) => {
console.error(error);
reject(error);
})
})
}