diff --git a/src/hooks/api/libraryHooks/index.ts b/src/hooks/api/libraryHooks/index.ts new file mode 100644 index 0000000000..53dadb17fd --- /dev/null +++ b/src/hooks/api/libraryHooks/index.ts @@ -0,0 +1 @@ +export * from './useGetDownload'; diff --git a/src/hooks/api/libraryHooks/useGetDownload.ts b/src/hooks/api/libraryHooks/useGetDownload.ts new file mode 100644 index 0000000000..031e0e49b8 --- /dev/null +++ b/src/hooks/api/libraryHooks/useGetDownload.ts @@ -0,0 +1,38 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LibraryApiGetDownloadRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getDownload = async ( + apiContext: JellyfinApiContext, + params: LibraryApiGetDownloadRequest, + options?: AxiosRequestConfig +) => { + const { api, user } = apiContext; + if (!api) throw new Error('No API instance available'); + if (!user?.Id) throw new Error('No User ID provided'); + + const response = await getLibraryApi(api).getDownload( + params, + options + ); + return response.data; +}; + +export const getDownloadQuery = ( + apiContext: JellyfinApiContext, + params: LibraryApiGetDownloadRequest +) => queryOptions({ + queryKey: ['Download', params.itemId], + queryFn: ({ signal }) => + getDownload(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.itemId +}); + +export const useGetDownload = ( + params: LibraryApiGetDownloadRequest +) => { + const apiContext = useApi(); + return useQuery(getDownloadQuery(apiContext, params)); +}; diff --git a/src/hooks/api/liveTvHooks/index.ts b/src/hooks/api/liveTvHooks/index.ts new file mode 100644 index 0000000000..458bb62e07 --- /dev/null +++ b/src/hooks/api/liveTvHooks/index.ts @@ -0,0 +1,5 @@ +export * from './useCancelSeriesTimer'; +export * from './useCancelTimer'; +export * from './useGetChannel'; +export * from './useGetSeriesTimer'; +export * from './useGetTimer'; diff --git a/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts b/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts new file mode 100644 index 0000000000..85c98b00e5 --- /dev/null +++ b/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts @@ -0,0 +1,23 @@ +import type { LiveTvApiCancelSeriesTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { useMutation } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const cancelSeriesTimer = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiCancelSeriesTimerRequest +) => { + const { api } = apiContext; + if (api) { + const response = await getLiveTvApi(api).cancelSeriesTimer(params); + return response.data; + } +}; + +export const useCancelSeriesTimer = () => { + const apiContext = useApi(); + return useMutation({ + mutationFn: (params: LiveTvApiCancelSeriesTimerRequest) => + cancelSeriesTimer(apiContext, params) + }); +}; diff --git a/src/hooks/api/liveTvHooks/useCancelTimer.ts b/src/hooks/api/liveTvHooks/useCancelTimer.ts new file mode 100644 index 0000000000..7ef8985cba --- /dev/null +++ b/src/hooks/api/liveTvHooks/useCancelTimer.ts @@ -0,0 +1,23 @@ +import type { LiveTvApiCancelTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { useMutation } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const cancelTimer = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiCancelTimerRequest +) => { + const { api } = apiContext; + if (api) { + const response = await getLiveTvApi(api).cancelTimer(params); + return response.data; + } +}; + +export const useCancelTimer = () => { + const apiContext = useApi(); + return useMutation({ + mutationFn: (params: LiveTvApiCancelTimerRequest) => + cancelTimer(apiContext, params) + }); +}; diff --git a/src/hooks/api/liveTvHooks/useGetChannel.ts b/src/hooks/api/liveTvHooks/useGetChannel.ts new file mode 100644 index 0000000000..93e241880c --- /dev/null +++ b/src/hooks/api/liveTvHooks/useGetChannel.ts @@ -0,0 +1,40 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LiveTvApiGetChannelRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getChannel = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetChannelRequest, + options?: AxiosRequestConfig +) => { + const { api, user } = apiContext; + if (!api) throw new Error('No API instance available'); + if (!user?.Id) throw new Error('No User ID provided'); + + const response = await getLiveTvApi(api).getChannel( + { + userId: user.Id, + ...params + }, + options + ); + return response.data; +}; + +export const getChannelQuery = ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetChannelRequest +) => queryOptions({ + queryKey: ['Channel', params.channelId], + queryFn: ({ signal }) => getChannel(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.channelId +}); + +export const useGetChannel = ( + params: LiveTvApiGetChannelRequest +) => { + const apiContext = useApi(); + return useQuery(getChannelQuery(apiContext, params)); +}; diff --git a/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts b/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts new file mode 100644 index 0000000000..d7342902a2 --- /dev/null +++ b/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts @@ -0,0 +1,34 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LiveTvApiGetSeriesTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getSeriesTimer = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetSeriesTimerRequest, + options?: AxiosRequestConfig +) => { + const { api } = apiContext; + if (!api) throw new Error('No API instance available'); + const response = await getLiveTvApi(api).getSeriesTimer( + params, + options + ); + + return response.data; +}; + +export const getSeriesTimerQuery = ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetSeriesTimerRequest +) => queryOptions({ + queryKey: ['SeriesTimer', params.timerId], + queryFn: ({ signal }) => getSeriesTimer(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId +}); + +export const useGetSeriesTimer = (requestParameters: LiveTvApiGetSeriesTimerRequest) => { + const apiContext = useApi(); + return useQuery(getSeriesTimerQuery(apiContext, requestParameters)); +}; diff --git a/src/hooks/api/liveTvHooks/useGetTimer.ts b/src/hooks/api/liveTvHooks/useGetTimer.ts new file mode 100644 index 0000000000..f219dea059 --- /dev/null +++ b/src/hooks/api/liveTvHooks/useGetTimer.ts @@ -0,0 +1,34 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LiveTvApiGetTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getTimer = async ( + currentApi: JellyfinApiContext, + params: LiveTvApiGetTimerRequest, + options?: AxiosRequestConfig +) => { + const { api } = currentApi; + if (!api) throw new Error('No API instance available'); + const response = await getLiveTvApi(api).getTimer( + params, + options + ); + + return response.data; +}; + +export const getTimerQuery = ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetTimerRequest +) => queryOptions({ + queryKey: ['Timer', params.timerId], + queryFn: ({ signal }) => getTimer(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId +}); + +export const useGetTimer = (requestParameters: LiveTvApiGetTimerRequest) => { + const apiContext = useApi(); + return useQuery(getTimerQuery(apiContext, requestParameters)); +}; diff --git a/src/hooks/api/videosHooks/index.ts b/src/hooks/api/videosHooks/index.ts new file mode 100644 index 0000000000..1c600b2209 --- /dev/null +++ b/src/hooks/api/videosHooks/index.ts @@ -0,0 +1 @@ +export * from './useDeleteAlternateSources'; diff --git a/src/hooks/api/videosHooks/useDeleteAlternateSources.ts b/src/hooks/api/videosHooks/useDeleteAlternateSources.ts new file mode 100644 index 0000000000..c504c1bef9 --- /dev/null +++ b/src/hooks/api/videosHooks/useDeleteAlternateSources.ts @@ -0,0 +1,23 @@ +import type { VideosApiDeleteAlternateSourcesRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getVideosApi } from '@jellyfin/sdk/lib/utils/api/videos-api'; +import { useMutation } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const deleteAlternateSources = async ( + apiContext: JellyfinApiContext, + params: VideosApiDeleteAlternateSourcesRequest +) => { + const { api } = apiContext; + if (api) { + const response = await getVideosApi(api).deleteAlternateSources(params); + return response.data; + } +}; + +export const useDeleteAlternateSources = () => { + const apiContext = useApi(); + return useMutation({ + mutationFn: (params: VideosApiDeleteAlternateSourcesRequest) => + deleteAlternateSources(apiContext, params) + }); +};