import { useConfigContext } from '~/config/provider'; import { RouterInputs, api } from '~/utils/api'; import { UsenetInfoRequestParams } from '../../../pages/api/modules/usenet'; import type { UsenetHistoryRequestParams } from '../../../pages/api/modules/usenet/history'; import { UsenetPauseRequestParams } from '../../../pages/api/modules/usenet/pause'; import type { UsenetQueueRequestParams } from '../../../pages/api/modules/usenet/queue'; import { UsenetResumeRequestParams } from '../../../pages/api/modules/usenet/resume'; const POLLING_INTERVAL = 2000; export const useGetUsenetInfo = ({ appId }: UsenetInfoRequestParams) => { const { name: configName } = useConfigContext(); return api.usenet.info.useQuery( { appId, configName: configName!, }, { refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, enabled: !!appId, } ); }; export const useGetUsenetDownloads = (params: UsenetQueueRequestParams) => { const { name: configName } = useConfigContext(); return api.usenet.queue.useQuery( { configName: configName!, ...params, }, { refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, } ); }; export const useGetUsenetHistory = (params: UsenetHistoryRequestParams) => { const { name: configName } = useConfigContext(); return api.usenet.history.useQuery( { configName: configName!, ...params, }, { refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, } ); }; export const usePauseUsenetQueueMutation = (params: UsenetPauseRequestParams) => { const { name: configName } = useConfigContext(); const { mutateAsync } = api.usenet.pause.useMutation(); const utils = api.useContext(); return async (variables: Omit) => { await mutateAsync( { configName: configName!, ...variables, }, { onSettled() { utils.usenet.info.invalidate({ appId: params.appId }); }, } ); }; }; export const useResumeUsenetQueueMutation = (params: UsenetResumeRequestParams) => { const { name: configName } = useConfigContext(); const { mutateAsync } = api.usenet.resume.useMutation(); const utils = api.useContext(); return async (variables: Omit) => { await mutateAsync( { configName: configName!, ...variables, }, { onSettled() { utils.usenet.info.invalidate({ appId: params.appId }); }, } ); }; };