mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2026-09-03 03:50:02 +03:00
Fix v12 api refactoring
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
import type { ActivityLogApiGetLogEntriesRequest } from '@jellyfin/sdk/lib/generated-client/api/activity-log-api';
|
||||
import type { SystemApiGetLogEntriesRequest } from '@jellyfin/sdk/lib/generated-client/api/system-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { getActivityLogApi } from '@jellyfin/sdk/lib/utils/api/activity-log-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
|
||||
const fetchLogEntries = async (
|
||||
api: Api,
|
||||
requestParams?: ActivityLogApiGetLogEntriesRequest,
|
||||
requestParams?: SystemApiGetLogEntriesRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getActivityLogApi(api).getLogEntries(requestParams, {
|
||||
const response = await getSystemApi(api).getLogEntries(requestParams, {
|
||||
signal: options?.signal
|
||||
});
|
||||
|
||||
@@ -19,7 +19,7 @@ const fetchLogEntries = async (
|
||||
};
|
||||
|
||||
export const useLogEntries = (
|
||||
requestParams: ActivityLogApiGetLogEntriesRequest
|
||||
requestParams: SystemApiGetLogEntriesRequest
|
||||
) => {
|
||||
const { api } = useApi();
|
||||
return useQuery({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { DevicesApiDeleteDeviceRequest } from '@jellyfin/sdk/lib/generated-client/api/devices-api';
|
||||
import { getDevicesApi } from '@jellyfin/sdk/lib/utils/api/devices-api';
|
||||
import type { DeviceApiDeleteDeviceRequest } from '@jellyfin/sdk/lib/generated-client/api/device-api';
|
||||
import { getDeviceApi } from '@jellyfin/sdk/lib/utils/api/device-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,8 +10,8 @@ export const useDeleteDevice = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: DevicesApiDeleteDeviceRequest) => (
|
||||
getDevicesApi(api!)
|
||||
mutationFn: (params: DeviceApiDeleteDeviceRequest) => (
|
||||
getDeviceApi(api!)
|
||||
.deleteDevice(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { DevicesApiGetDevicesRequest } from '@jellyfin/sdk/lib/generated-client/api/devices-api';
|
||||
import type { DeviceApiGetDevicesRequest } from '@jellyfin/sdk/lib/generated-client/api/device-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { getDevicesApi } from '@jellyfin/sdk/lib/utils/api/devices-api';
|
||||
import { getDeviceApi } from '@jellyfin/sdk/lib/utils/api/device-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,10 +10,10 @@ export const QUERY_KEY = 'Devices';
|
||||
|
||||
const fetchDevices = async (
|
||||
api: Api,
|
||||
requestParams?: DevicesApiGetDevicesRequest,
|
||||
requestParams?: DeviceApiGetDevicesRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getDevicesApi(api).getDevices(requestParams, {
|
||||
const response = await getDeviceApi(api).getDevices(requestParams, {
|
||||
signal: options?.signal
|
||||
});
|
||||
|
||||
@@ -21,7 +21,7 @@ const fetchDevices = async (
|
||||
};
|
||||
|
||||
export const useDevices = (
|
||||
requestParams: DevicesApiGetDevicesRequest
|
||||
requestParams: DeviceApiGetDevicesRequest
|
||||
) => {
|
||||
const { api } = useApi();
|
||||
return useQuery({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { DevicesApiUpdateDeviceOptionsRequest } from '@jellyfin/sdk/lib/generated-client/api/devices-api';
|
||||
import { getDevicesApi } from '@jellyfin/sdk/lib/utils/api/devices-api';
|
||||
import type { DeviceApiUpdateDeviceOptionsRequest } from '@jellyfin/sdk/lib/generated-client/api/device-api';
|
||||
import { getDeviceApi } from '@jellyfin/sdk/lib/utils/api/device-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,8 +10,8 @@ export const useUpdateDevice = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: DevicesApiUpdateDeviceOptionsRequest) => (
|
||||
getDevicesApi(api!)
|
||||
mutationFn: (params: DeviceApiUpdateDeviceOptionsRequest) => (
|
||||
getDeviceApi(api!)
|
||||
.updateDeviceOptions(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, { useCallback, useMemo, useState } from 'react';
|
||||
import type { SessionInfo } from '@jellyfin/sdk/lib/generated-client/models/session-info';
|
||||
import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/session-info-dto';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import Card from '@mui/material/Card';
|
||||
import CardMedia from '@mui/material/CardMedia';
|
||||
@@ -27,7 +27,7 @@ import InputDialog from 'components/InputDialog';
|
||||
import { useSendMessage } from '../../sessions/api/useSendMessage';
|
||||
|
||||
type DeviceCardProps = {
|
||||
device: SessionInfo;
|
||||
device: SessionInfoDto;
|
||||
};
|
||||
|
||||
const DeviceCard = ({ device }: DeviceCardProps) => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { getApiKeyApi } from '@jellyfin/sdk/lib/utils/api/api-key-api';
|
||||
import { getAuthenticationApi } from '@jellyfin/sdk/lib/utils/api/authentication-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -7,7 +7,7 @@ import { useApi } from 'hooks/useApi';
|
||||
export const QUERY_KEY = 'ApiKeys';
|
||||
|
||||
const fetchApiKeys = async (api: Api, options?: AxiosRequestConfig) => {
|
||||
const response = await getApiKeyApi(api).getKeys(options);
|
||||
const response = await getAuthenticationApi(api).getKeys(options);
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ApiKeyApiCreateKeyRequest } from '@jellyfin/sdk/lib/generated-client/api/api-key-api';
|
||||
import { getApiKeyApi } from '@jellyfin/sdk/lib/utils/api/api-key-api';
|
||||
import { AuthenticationApiCreateKeyRequest } from '@jellyfin/sdk/lib/generated-client/api/authentication-api';
|
||||
import { getAuthenticationApi } from '@jellyfin/sdk/lib/utils/api/authentication-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
@@ -9,8 +9,8 @@ export const useCreateKey = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: ApiKeyApiCreateKeyRequest) => (
|
||||
getApiKeyApi(api!)
|
||||
mutationFn: (params: AuthenticationApiCreateKeyRequest) => (
|
||||
getAuthenticationApi(api!)
|
||||
.createKey(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { ApiKeyApiRevokeKeyRequest } from '@jellyfin/sdk/lib/generated-client/api/api-key-api';
|
||||
import { getApiKeyApi } from '@jellyfin/sdk/lib/utils/api/api-key-api';
|
||||
import type { AuthenticationApiRevokeKeyRequest } from '@jellyfin/sdk/lib/generated-client/api/authentication-api';
|
||||
import { getAuthenticationApi } from '@jellyfin/sdk/lib/utils/api/authentication-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
@@ -9,8 +9,8 @@ export const useRevokeKey = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: ApiKeyApiRevokeKeyRequest) => (
|
||||
getApiKeyApi(api!)
|
||||
mutationFn: (params: AuthenticationApiRevokeKeyRequest) => (
|
||||
getAuthenticationApi(api!)
|
||||
.revokeKey(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import type { DashboardApiGetConfigurationPagesRequest } from '@jellyfin/sdk/lib/generated-client/api/dashboard-api';
|
||||
import { getDashboardApi } from '@jellyfin/sdk/lib/utils/api/dashboard-api';
|
||||
import type { PluginApiGetConfigurationPagesRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -10,17 +10,17 @@ import { QueryKey } from './queryKey';
|
||||
|
||||
const fetchConfigurationPages = async (
|
||||
api: Api,
|
||||
params?: DashboardApiGetConfigurationPagesRequest,
|
||||
params?: PluginApiGetConfigurationPagesRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getDashboardApi(api)
|
||||
const response = await getPluginApi(api)
|
||||
.getConfigurationPages(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getConfigurationPagesQuery = (
|
||||
api?: Api,
|
||||
params?: DashboardApiGetConfigurationPagesRequest
|
||||
params?: PluginApiGetConfigurationPagesRequest
|
||||
) => queryOptions({
|
||||
queryKey: [ QueryKey.ConfigurationPages, params?.enableInMainMenu ],
|
||||
queryFn: ({ signal }) => fetchConfigurationPages(api!, params, { signal }),
|
||||
@@ -28,7 +28,7 @@ const getConfigurationPagesQuery = (
|
||||
});
|
||||
|
||||
export const useConfigurationPages = (
|
||||
params?: DashboardApiGetConfigurationPagesRequest
|
||||
params?: PluginApiGetConfigurationPagesRequest
|
||||
) => {
|
||||
const { api } = useApi();
|
||||
return useQuery(getConfigurationPagesQuery(api, params));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { PluginsApiDisablePluginRequest } from '@jellyfin/sdk/lib/generated-client/api/plugins-api';
|
||||
import { getPluginsApi } from '@jellyfin/sdk/lib/utils/api/plugins-api';
|
||||
import type { PluginApiDisablePluginRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,8 +10,8 @@ import { QueryKey } from './queryKey';
|
||||
export const useDisablePlugin = () => {
|
||||
const { api } = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (params: PluginsApiDisablePluginRequest) => (
|
||||
getPluginsApi(api!)
|
||||
mutationFn: (params: PluginApiDisablePluginRequest) => (
|
||||
getPluginApi(api!)
|
||||
.disablePlugin(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { PluginsApiEnablePluginRequest } from '@jellyfin/sdk/lib/generated-client/api/plugins-api';
|
||||
import { getPluginsApi } from '@jellyfin/sdk/lib/utils/api/plugins-api';
|
||||
import type { PluginApiEnablePluginRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,8 +10,8 @@ import { QueryKey } from './queryKey';
|
||||
export const useEnablePlugin = () => {
|
||||
const { api } = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (params: PluginsApiEnablePluginRequest) => (
|
||||
getPluginsApi(api!)
|
||||
mutationFn: (params: PluginApiEnablePluginRequest) => (
|
||||
getPluginApi(api!)
|
||||
.enablePlugin(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { PackageApiInstallPackageRequest } from '@jellyfin/sdk/lib/generated-client/api/package-api';
|
||||
import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api';
|
||||
import type { PluginApiInstallPackageRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,8 +10,8 @@ import { QueryKey } from './queryKey';
|
||||
export const useInstallPackage = () => {
|
||||
const { api } = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (params: PackageApiInstallPackageRequest) => (
|
||||
getPackageApi(api!)
|
||||
mutationFn: (params: PluginApiInstallPackageRequest) => (
|
||||
getPluginApi(api!)
|
||||
.installPackage(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import type { PackageApiGetPackageInfoRequest } from '@jellyfin/sdk/lib/generated-client/api/package-api';
|
||||
import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api';
|
||||
import type { PluginApiGetPackageInfoRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -12,7 +12,7 @@ import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/pack
|
||||
|
||||
const fetchPackageInfo = async (
|
||||
api: Api,
|
||||
params: PackageApiGetPackageInfoRequest,
|
||||
params: PluginApiGetPackageInfoRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const packagesData = queryClient.getQueryData([ QueryKey.Packages ]) as PackageInfo[];
|
||||
@@ -25,14 +25,14 @@ const fetchPackageInfo = async (
|
||||
}
|
||||
}
|
||||
|
||||
const response = await getPackageApi(api)
|
||||
const response = await getPluginApi(api)
|
||||
.getPackageInfo(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getPackageInfoQuery = (
|
||||
api: Api | undefined,
|
||||
params?: PackageApiGetPackageInfoRequest
|
||||
params?: PluginApiGetPackageInfoRequest
|
||||
) => queryOptions({
|
||||
// Don't retry since requests for plugins not available in repos fail
|
||||
retry: false,
|
||||
@@ -42,7 +42,7 @@ const getPackageInfoQuery = (
|
||||
});
|
||||
|
||||
export const usePackageInfo = (
|
||||
params?: PackageApiGetPackageInfoRequest
|
||||
params?: PluginApiGetPackageInfoRequest
|
||||
) => {
|
||||
const { api } = useApi();
|
||||
return useQuery(getPackageInfoQuery(api, params));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -11,7 +11,7 @@ const fetchPackages = async (
|
||||
api: Api,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getPackageApi(api)
|
||||
const response = await getPluginApi(api)
|
||||
.getPackages(options);
|
||||
return response.data;
|
||||
};
|
||||
@@ -29,4 +29,3 @@ export const usePackages = () => {
|
||||
const { api } = useApi();
|
||||
return useQuery(getPackagesQuery(api));
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { getPluginsApi } from '@jellyfin/sdk/lib/utils/api/plugins-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -11,8 +11,7 @@ const fetchPlugins = async (
|
||||
api: Api,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getPluginsApi(api)
|
||||
.getPlugins(options);
|
||||
const response = await getPluginApi(api).getPlugins(options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
@@ -28,4 +27,3 @@ export const usePlugins = () => {
|
||||
const { api } = useApi();
|
||||
return useQuery(getPluginsQuery(api));
|
||||
};
|
||||
|
||||
|
||||
@@ -3,13 +3,13 @@ import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { QueryKey } from './queryKey';
|
||||
import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
|
||||
const fetchRepositories = async (
|
||||
api: Api,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getPackageApi(api)
|
||||
const response = await getPluginApi(api)
|
||||
.getRepositories(options);
|
||||
return response.data;
|
||||
};
|
||||
@@ -26,4 +26,3 @@ export const useRepositories = () => {
|
||||
const { api } = useApi();
|
||||
return useQuery(getRepositoriesQuery(api));
|
||||
};
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@ import { useMutation } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
import { QueryKey } from './queryKey';
|
||||
import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api';
|
||||
import { PackageApiSetRepositoriesRequest } from '@jellyfin/sdk/lib/generated-client/api/package-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { PluginApiSetRepositoriesRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
|
||||
export const useSetRepositories = () => {
|
||||
const { api } = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (params: PackageApiSetRepositoriesRequest) => (
|
||||
getPackageApi(api!)
|
||||
mutationFn: (params: PluginApiSetRepositoriesRequest) => (
|
||||
getPluginApi(api!)
|
||||
.setRepositories(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { PluginsApiUninstallPluginByVersionRequest } from '@jellyfin/sdk/lib/generated-client/api/plugins-api';
|
||||
import { getPluginsApi } from '@jellyfin/sdk/lib/utils/api/plugins-api';
|
||||
import type { PluginApiUninstallPluginByVersionRequest } from '@jellyfin/sdk/lib/generated-client/api/plugin-api';
|
||||
import { getPluginApi } from '@jellyfin/sdk/lib/utils/api/plugin-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,8 +10,8 @@ import { QueryKey } from './queryKey';
|
||||
export const useUninstallPlugin = () => {
|
||||
const { api } = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (params: PluginsApiUninstallPluginByVersionRequest) => (
|
||||
getPluginsApi(api!)
|
||||
mutationFn: (params: PluginApiUninstallPluginByVersionRequest) => (
|
||||
getPluginApi(api!)
|
||||
.uninstallPluginByVersion(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { SessionInfo } from '@jellyfin/sdk/lib/generated-client/models/session-info';
|
||||
import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/session-info-dto';
|
||||
import itemHelper from 'components/itemHelper';
|
||||
import formatDistanceToNow from 'date-fns/formatDistanceToNow';
|
||||
import globalize from 'lib/globalize';
|
||||
@@ -11,7 +11,7 @@ type NowPlayingInfo = {
|
||||
image?: string;
|
||||
};
|
||||
|
||||
const getNowPlayingName = (session: SessionInfo): NowPlayingInfo => {
|
||||
const getNowPlayingName = (session: SessionInfoDto): NowPlayingInfo => {
|
||||
let imgUrl = '';
|
||||
const nowPlayingItem = session.NowPlayingItem;
|
||||
// FIXME: It seems that, sometimes, server sends date in the future, so date-fns displays messages like 'in less than a minute'. We should fix
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import type { SessionInfo } from '@jellyfin/sdk/lib/generated-client/models/session-info';
|
||||
import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/session-info-dto';
|
||||
import playmethodhelper from 'components/playback/playmethodhelper';
|
||||
import globalize from 'lib/globalize';
|
||||
|
||||
// eslint-disable-next-line sonarjs/cognitive-complexity
|
||||
const getSessionNowPlayingStreamInfo = (session: SessionInfo): string => {
|
||||
const getSessionNowPlayingStreamInfo = (session: SessionInfoDto): string => {
|
||||
let text = '';
|
||||
let showTranscodingInfo = false;
|
||||
const displayPlayMethod = playmethodhelper.getDisplayPlayMethod(session);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { SessionInfo } from '@jellyfin/sdk/lib/generated-client/models/session-info';
|
||||
import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/session-info-dto';
|
||||
import datetime from 'scripts/datetime';
|
||||
|
||||
const getSessionNowPlayingTime = (session: SessionInfo) => {
|
||||
const getSessionNowPlayingTime = (session: SessionInfoDto) => {
|
||||
const nowPlayingItem = session.NowPlayingItem;
|
||||
|
||||
let start = '0:00';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ScheduledTasksApiStartTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api';
|
||||
import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api';
|
||||
import { ScheduledTaskApiStartTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-task-api';
|
||||
import { getScheduledTaskApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
@@ -9,8 +9,8 @@ export const useStartTask = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: ScheduledTasksApiStartTaskRequest) => (
|
||||
getScheduledTasksApi(api!)
|
||||
mutationFn: (params: ScheduledTaskApiStartTaskRequest) => (
|
||||
getScheduledTaskApi(api!)
|
||||
.startTask(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ScheduledTasksApiStartTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api';
|
||||
import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api';
|
||||
import { ScheduledTaskApiStartTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-task-api';
|
||||
import { getScheduledTaskApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
@@ -9,8 +9,8 @@ export const useStopTask = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: ScheduledTasksApiStartTaskRequest) => (
|
||||
getScheduledTasksApi(api!)
|
||||
mutationFn: (params: ScheduledTaskApiStartTaskRequest) => (
|
||||
getScheduledTaskApi(api!)
|
||||
.stopTask(params)
|
||||
),
|
||||
onSuccess: () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { ScheduledTasksApiGetTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api';
|
||||
import type { ScheduledTaskApiGetTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-task-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api';
|
||||
import { getScheduledTaskApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -9,15 +9,15 @@ import { QUERY_KEY } from './useTasks';
|
||||
|
||||
const fetchTask = async (
|
||||
api: Api,
|
||||
params: ScheduledTasksApiGetTaskRequest,
|
||||
params: ScheduledTaskApiGetTaskRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getScheduledTasksApi(api).getTask(params, options);
|
||||
const response = await getScheduledTaskApi(api).getTask(params, options);
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const useTask = (params: ScheduledTasksApiGetTaskRequest) => {
|
||||
export const useTask = (params: ScheduledTaskApiGetTaskRequest) => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useQuery({
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { ScheduledTasksApiGetTasksRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api';
|
||||
import type { ScheduledTaskApiGetTasksRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-task-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api';
|
||||
import { getScheduledTaskApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -10,15 +10,15 @@ export const QUERY_KEY = 'Tasks';
|
||||
|
||||
const fetchTasks = async (
|
||||
api: Api,
|
||||
params?: ScheduledTasksApiGetTasksRequest,
|
||||
params?: ScheduledTaskApiGetTasksRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getScheduledTasksApi(api).getTasks(params, options);
|
||||
const response = await getScheduledTaskApi(api).getTasks(params, options);
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const useTasks = (params?: ScheduledTasksApiGetTasksRequest) => {
|
||||
export const useTasks = (params?: ScheduledTaskApiGetTasksRequest) => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useQuery({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ScheduledTasksApiUpdateTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api';
|
||||
import { getScheduledTasksApi } from '@jellyfin/sdk/lib/utils/api/scheduled-tasks-api';
|
||||
import { ScheduledTaskApiUpdateTaskRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-task-api';
|
||||
import { getScheduledTaskApi } from '@jellyfin/sdk/lib/utils/api/scheduled-task-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
@@ -9,8 +9,8 @@ export const useUpdateTask = () => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (params: ScheduledTasksApiUpdateTaskRequest) => (
|
||||
getScheduledTasksApi(api!)
|
||||
mutationFn: (params: ScheduledTaskApiUpdateTaskRequest) => (
|
||||
getScheduledTaskApi(api!)
|
||||
.updateTask(params)
|
||||
),
|
||||
onSuccess: (_data, params) => {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { QUERY_KEY, useTasks } from '../api/useTasks';
|
||||
import type { ScheduledTasksApiGetTasksRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-tasks-api';
|
||||
import type { ScheduledTaskApiGetTasksRequest } from '@jellyfin/sdk/lib/generated-client/api/scheduled-task-api';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
import { OutboundWebSocketMessageType } from '@jellyfin/sdk/lib/websocket';
|
||||
|
||||
const useLiveTasks = (params: ScheduledTasksApiGetTasksRequest) => {
|
||||
const useLiveTasks = (params: ScheduledTaskApiGetTasksRequest) => {
|
||||
const { api } = useApi();
|
||||
const tasksQuery = useTasks(params);
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { getChannelsApi } from '@jellyfin/sdk/lib/utils/api/channels-api';
|
||||
import { ChannelsApiGetChannelsRequest } from '@jellyfin/sdk/lib/generated-client/api/channels-api';
|
||||
import { getChannelApi } from '@jellyfin/sdk/lib/utils/api/channel-api';
|
||||
import { ChannelApiGetChannelsRequest } from '@jellyfin/sdk/lib/generated-client/api/channel-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
const fetchChannels = async (api: Api, params?: ChannelsApiGetChannelsRequest, options?: AxiosRequestConfig) => {
|
||||
const response = await getChannelsApi(api).getChannels(params, options);
|
||||
const fetchChannels = async (api: Api, params?: ChannelApiGetChannelsRequest, options?: AxiosRequestConfig) => {
|
||||
const response = await getChannelApi(api).getChannels(params, options);
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const useChannels = (params?: ChannelsApiGetChannelsRequest) => {
|
||||
export const useChannels = (params?: ChannelApiGetChannelsRequest) => {
|
||||
const { api } = useApi();
|
||||
|
||||
return useQuery({
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import type { NetworkConfiguration } from '@jellyfin/sdk/lib/generated-client/models/network-configuration';
|
||||
|
||||
const fetchNetworkConfig = async (api: Api, options?: AxiosRequestConfig) => {
|
||||
const response = await getConfigurationApi(api).getNamedConfiguration({ key: 'network' }, options);
|
||||
const response = await getSystemApi(api).getNamedConfiguration({ key: 'network' }, options);
|
||||
|
||||
return response.data as NetworkConfiguration;
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { BrandingOptions } from '@jellyfin/sdk/lib/generated-client/models/branding-options';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import type { BrandingOptionsDto } from '@jellyfin/sdk/lib/generated-client/models/branding-options-dto';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { getImageApi } from '@jellyfin/sdk/lib/utils/api/image-api';
|
||||
import Delete from '@mui/icons-material/Delete';
|
||||
import Upload from '@mui/icons-material/Upload';
|
||||
@@ -39,13 +39,13 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const formData = await request.formData();
|
||||
const data = Object.fromEntries(formData);
|
||||
|
||||
const brandingOptions: BrandingOptions = {
|
||||
const brandingOptions: BrandingOptionsDto = {
|
||||
CustomCss: data.CustomCss?.toString(),
|
||||
LoginDisclaimer: data.LoginDisclaimer?.toString(),
|
||||
SplashscreenEnabled: data.SplashscreenEnabled?.toString() === 'on'
|
||||
};
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateNamedConfiguration({
|
||||
key: BRANDING_CONFIG_KEY,
|
||||
body: JSON.stringify(brandingOptions)
|
||||
@@ -150,7 +150,7 @@ export const Component = () => {
|
||||
const setSplashscreenEnabled = useCallback(async (_: React.ChangeEvent<HTMLInputElement>, isEnabled: boolean) => {
|
||||
setIsSplashscreenEnabled(isEnabled);
|
||||
|
||||
await getConfigurationApi(api!)
|
||||
await getSystemApi(api!)
|
||||
.updateNamedConfiguration({
|
||||
key: BRANDING_CONFIG_KEY,
|
||||
body: JSON.stringify({
|
||||
|
||||
@@ -77,7 +77,7 @@ export const Component = () => {
|
||||
const onConfirmDelete = useCallback(() => {
|
||||
if (pendingDeleteDeviceId) {
|
||||
deleteDevice.mutate({
|
||||
id: pendingDeleteDeviceId
|
||||
id: [pendingDeleteDeviceId]
|
||||
}, {
|
||||
onSettled: onCloseDeleteConfirmDialog
|
||||
});
|
||||
@@ -97,7 +97,7 @@ export const Component = () => {
|
||||
Promise
|
||||
.all(devices.map(item => {
|
||||
if (api && item.Id && api.deviceInfo.id === item.Id) {
|
||||
return deleteDevice.mutateAsync({ id: item.Id });
|
||||
return deleteDevice.mutateAsync({ id: [item.Id] });
|
||||
}
|
||||
return Promise.resolve();
|
||||
}))
|
||||
|
||||
@@ -12,7 +12,7 @@ import TextField from '@mui/material/TextField';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import Loading from 'components/loading/LoadingComponent';
|
||||
import Page from 'components/Page';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { QUERY_KEY as CONFIG_QUERY_KEY, useConfiguration } from 'hooks/useConfiguration';
|
||||
import { QUERY_KEY as NAMED_CONFIG_QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration';
|
||||
import globalize from 'lib/globalize';
|
||||
@@ -31,7 +31,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const formData = await request.formData();
|
||||
const data = Object.fromEntries(formData);
|
||||
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
|
||||
const metadataConfig: MetadataConfiguration = {
|
||||
UseFileCreationTimeForDateAdded: data.DateAddedBehavior.toString() === '1'
|
||||
@@ -43,10 +43,10 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
config.EnableGroupingShowsIntoCollections = data.GroupShowsIntoCollections?.toString() === 'on';
|
||||
config.EnableExternalContentInSuggestions = data.EnableExternalContentInSuggestions?.toString() === 'on';
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateNamedConfiguration({ key: CONFIG_KEY, body: metadataConfig });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image-resolution';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import Alert from '@mui/material/Alert';
|
||||
import Box from '@mui/material/Box';
|
||||
import Button from '@mui/material/Button';
|
||||
@@ -27,14 +27,14 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const formData = await request.formData();
|
||||
const data = Object.fromEntries(formData);
|
||||
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
|
||||
config.PreferredMetadataLanguage = data.Language.toString();
|
||||
config.MetadataCountryCode = data.Country.toString();
|
||||
config.DummyChapterDuration = parseInt(data.DummyChapterDuration.toString(), 10);
|
||||
config.ChapterImageResolution = data.ChapterImageResolution.toString() as ImageResolution;
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import Alert from '@mui/material/Alert';
|
||||
import Box from '@mui/material/Box';
|
||||
import Button from '@mui/material/Button';
|
||||
@@ -40,7 +40,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
EnableExtraThumbsDuplication: data.EnableExtraThumbsDuplication?.toString() === 'on'
|
||||
};
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateNamedConfiguration({ key: CONFIG_KEY, body: newConfig });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -21,7 +21,7 @@ import Checkbox from '@mui/material/Checkbox';
|
||||
import FormHelperText from '@mui/material/FormHelperText';
|
||||
import Button from '@mui/material/Button';
|
||||
import { ServerConnections } from 'lib/jellyfin-apiclient';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
import { ActionData } from 'types/actionData';
|
||||
|
||||
@@ -33,7 +33,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
|
||||
const data = await request.json() as LiveTvOptions;
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateNamedConfiguration({ key: CONFIG_KEY, body: data });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, { ChangeEvent, useCallback, useEffect, useState } from 'react';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import Loading from 'components/loading/LoadingComponent';
|
||||
import Page from 'components/Page';
|
||||
import globalize from 'lib/globalize';
|
||||
@@ -24,7 +24,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
if (!api) throw new Error('No Api instance available');
|
||||
|
||||
const formData = await request.formData();
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
|
||||
const enableWarningMessage = formData.get('EnableWarningMessage');
|
||||
config.EnableSlowResponseWarning = enableWarningMessage === 'on';
|
||||
@@ -34,7 +34,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
config.SlowResponseThresholdMs = parseInt(responseTime.toString(), 10);
|
||||
}
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
return {
|
||||
|
||||
@@ -21,7 +21,7 @@ import DirectoryBrowser from 'components/directorybrowser/directorybrowser';
|
||||
import MenuItem from '@mui/material/MenuItem';
|
||||
import Button from '@mui/material/Button';
|
||||
import { ServerConnections } from 'lib/jellyfin-apiclient';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { QUERY_KEY as CONFIG_QUERY_KEY } from 'hooks/useConfiguration';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
import { encodePublishedServerUris, getPublishedServerUris, PublishedServerUris, splitString } from 'apps/dashboard/features/networking/utils';
|
||||
@@ -69,7 +69,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
|
||||
newConfig.PublishedServerUriBySubnet = encodePublishedServerUris(publishedServerUri);
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateNamedConfiguration({ key: CONFIG_KEY, body: newConfig });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -12,14 +12,14 @@ import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'rea
|
||||
import { ActionData } from 'types/actionData';
|
||||
import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration';
|
||||
import Loading from 'components/loading/LoadingComponent';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
|
||||
export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const api = ServerConnections.getApi();
|
||||
if (!api) throw new Error('No Api instance available');
|
||||
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
const formData = await request.formData();
|
||||
|
||||
const minResumePercentage = formData.get('MinResumePercentage')?.toString();
|
||||
@@ -34,7 +34,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
if (maxAudiobookResume) config.MaxAudiobookResume = parseInt(maxAudiobookResume, 10);
|
||||
if (minResumeDuration) config.MinResumeDurationSeconds = parseInt(minResumeDuration, 10);
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -9,7 +9,7 @@ import Stack from '@mui/material/Stack';
|
||||
import TextField from '@mui/material/TextField';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration';
|
||||
import Loading from 'components/loading/LoadingComponent';
|
||||
import { ActionData } from 'types/actionData';
|
||||
@@ -19,13 +19,13 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const api = ServerConnections.getApi();
|
||||
if (!api) throw new Error('No Api instance available');
|
||||
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
const formData = await request.formData();
|
||||
|
||||
const bitrateLimit = formData.get('StreamingBitrateLimit')?.toString();
|
||||
config.RemoteClientBitrateLimit = Math.trunc(1e6 * parseFloat(bitrateLimit || '0'));
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -24,7 +24,7 @@ import { QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration';
|
||||
import type { EncodingOptions } from '@jellyfin/sdk/lib/generated-client/models/encoding-options';
|
||||
import { HardwareAccelerationType } from '@jellyfin/sdk/lib/generated-client/models/hardware-acceleration-type';
|
||||
import { ServerConnections } from 'lib/jellyfin-apiclient';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
import { ActionData } from 'types/actionData';
|
||||
import { CODECS, HEVC_REXT_DECODING_TYPES, HEVC_VP9_HW_DECODING_TYPES } from 'apps/dashboard/features/playback/constants/codecs';
|
||||
@@ -38,7 +38,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
|
||||
const data = await request.json() as EncodingOptions;
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateNamedConfiguration({ key: CONFIG_KEY, body: data });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -17,7 +17,7 @@ import MenuItem from '@mui/material/MenuItem';
|
||||
import TextField from '@mui/material/TextField';
|
||||
import Button from '@mui/material/Button';
|
||||
import Alert from '@mui/material/Alert';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { TrickplayScanBehavior } from '@jellyfin/sdk/lib/generated-client/models/trickplay-scan-behavior';
|
||||
import { ProcessPriorityClass } from '@jellyfin/sdk/lib/generated-client/models/process-priority-class';
|
||||
import { ActionData } from 'types/actionData';
|
||||
@@ -30,7 +30,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const formData = await request.formData();
|
||||
const data = Object.fromEntries(formData);
|
||||
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
|
||||
const options = config.TrickplayOptions;
|
||||
if (!options) throw new Error('Unexpected null TrickplayOptions');
|
||||
@@ -48,7 +48,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
options.JpegQuality = parseInt(data.JpegQuality.toString() || '90', 10);
|
||||
options.ProcessThreads = parseInt(data.TrickplayThreads.toString() || '1', 10);
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -22,7 +22,7 @@ import Checkbox from '@mui/material/Checkbox';
|
||||
import Button from '@mui/material/Button';
|
||||
import Link from '@mui/material/Link';
|
||||
import DirectoryBrowser from 'components/directorybrowser/directorybrowser';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { queryClient } from 'utils/query/queryClient';
|
||||
import { ActionData } from 'types/actionData';
|
||||
|
||||
@@ -30,7 +30,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
const api = ServerConnections.getApi();
|
||||
if (!api) throw new Error('No Api instance available');
|
||||
|
||||
const { data: config } = await getConfigurationApi(api).getConfiguration();
|
||||
const { data: config } = await getSystemApi(api).getConfiguration();
|
||||
const formData = await request.formData();
|
||||
|
||||
config.ServerName = formData.get('ServerName')?.toString();
|
||||
@@ -41,7 +41,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
|
||||
config.LibraryScanFanoutConcurrency = parseInt(formData.get('LibraryScanFanoutConcurrency')?.toString() || '0', 10);
|
||||
config.ParallelImageEncodingLimit = parseInt(formData.get('ParallelImageEncodingLimit')?.toString() || '0', 10);
|
||||
|
||||
await getConfigurationApi(api)
|
||||
await getSystemApi(api)
|
||||
.updateConfiguration({ serverConfiguration: config });
|
||||
|
||||
void queryClient.invalidateQueries({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-ite
|
||||
import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type';
|
||||
import { ItemFields } from '@jellyfin/sdk/lib/generated-client/models/item-fields';
|
||||
import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by';
|
||||
import { getStudiosApi } from '@jellyfin/sdk/lib/utils/api/studios-api';
|
||||
import { getStudioApi } from '@jellyfin/sdk/lib/utils/api/studio-api';
|
||||
|
||||
import cardBuilder from 'components/cardbuilder/cardBuilder';
|
||||
import { getBackdropShape, getPortraitShape, getSquareShape } from 'components/cardbuilder/utils/shape';
|
||||
@@ -208,7 +208,7 @@ function getFetchDataFn(section) {
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
|
||||
return getStudiosApi(api)
|
||||
return getStudioApi(api)
|
||||
.getStudios({
|
||||
userId,
|
||||
isFavorite: true,
|
||||
|
||||
@@ -2,7 +2,6 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-ite
|
||||
import { ItemFields } from '@jellyfin/sdk/lib/generated-client/models/item-fields';
|
||||
import { PersonKind } from '@jellyfin/sdk/lib/generated-client/models/person-kind';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api';
|
||||
import { intervalToDuration } from 'date-fns';
|
||||
import DOMPurify from 'dompurify';
|
||||
import escapeHtml from 'escape-html';
|
||||
@@ -2170,7 +2169,7 @@ export default function (view, params) {
|
||||
return;
|
||||
}
|
||||
|
||||
getUserLibraryApi(api).getItem({
|
||||
getLibraryApi(api).getItem({
|
||||
userId: apiClient?.getCurrentUserId(),
|
||||
itemId: selectedId
|
||||
}).then(function ({ data: altItem }) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api';
|
||||
import { getLyricApi } from '@jellyfin/sdk/lib/utils/api/lyric-api';
|
||||
import escapeHtml from 'escape-html';
|
||||
|
||||
import { AutoScroll } from 'apps/legacy/features/lyrics/constants/autoScroll';
|
||||
@@ -137,7 +137,7 @@ export default function (view) {
|
||||
return;
|
||||
}
|
||||
|
||||
return getLyricsApi(api).getLyrics({ itemId })
|
||||
return getLyricApi(api).getLyrics({ itemId })
|
||||
.then(({ data }) => {
|
||||
if (!data.Lyrics?.length) {
|
||||
throw new Error('No lyrics returned');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import type { UserLibraryApiGetLatestMediaRequest } from '@jellyfin/sdk/lib/generated-client/api/user-library-api';
|
||||
import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api';
|
||||
import type { LibraryApiGetLatestMediaRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -8,17 +8,17 @@ import { useApi } from 'hooks/useApi';
|
||||
|
||||
const fetchLatestMedia = async (
|
||||
api: Api,
|
||||
params?: UserLibraryApiGetLatestMediaRequest,
|
||||
params?: LibraryApiGetLatestMediaRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getUserLibraryApi(api)
|
||||
const response = await getLibraryApi(api)
|
||||
.getLatestMedia(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const getLatestMediaQuery = (
|
||||
api?: Api,
|
||||
params?: UserLibraryApiGetLatestMediaRequest
|
||||
params?: LibraryApiGetLatestMediaRequest
|
||||
) => queryOptions({
|
||||
queryKey: [ 'User', params?.userId, 'LatestMedia', params ],
|
||||
queryFn: ({ signal }) => fetchLatestMedia(api!, params, { signal }),
|
||||
@@ -26,7 +26,7 @@ export const getLatestMediaQuery = (
|
||||
});
|
||||
|
||||
export const useLatestMedia = (
|
||||
params?: UserLibraryApiGetLatestMediaRequest
|
||||
params?: LibraryApiGetLatestMediaRequest
|
||||
) => {
|
||||
const { api, user } = useApi();
|
||||
return useQuery(getLatestMediaQuery(api, {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import type { TvShowsApiGetNextUpRequest } from '@jellyfin/sdk/lib/generated-client/api/tv-shows-api';
|
||||
import { getTvShowsApi } from '@jellyfin/sdk/lib/utils/api/tv-shows-api';
|
||||
import type { ShowApiGetNextUpRequest } from '@jellyfin/sdk/lib/generated-client/api/show-api';
|
||||
import { getShowApi } from '@jellyfin/sdk/lib/utils/api/show-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -8,17 +8,17 @@ import { useApi } from 'hooks/useApi';
|
||||
|
||||
const fetchNextUp = async (
|
||||
api: Api,
|
||||
params?: TvShowsApiGetNextUpRequest,
|
||||
params?: ShowApiGetNextUpRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getTvShowsApi(api)
|
||||
const response = await getShowApi(api)
|
||||
.getNextUp(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const getNextUpQuery = (
|
||||
api?: Api,
|
||||
params?: TvShowsApiGetNextUpRequest
|
||||
params?: ShowApiGetNextUpRequest
|
||||
) => queryOptions({
|
||||
queryKey: [ 'User', params?.userId, 'NextUp', params ],
|
||||
queryFn: ({ signal }) => fetchNextUp(api!, params, { signal }),
|
||||
@@ -26,7 +26,7 @@ export const getNextUpQuery = (
|
||||
});
|
||||
|
||||
export const useNextUp = (
|
||||
params?: TvShowsApiGetNextUpRequest
|
||||
params?: ShowApiGetNextUpRequest
|
||||
) => {
|
||||
const { api, user } = useApi();
|
||||
return useQuery(getNextUpQuery(api, {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import type { ItemsApiGetResumeItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/items-api';
|
||||
import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
|
||||
import type { LibraryApiGetResumeItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -8,17 +8,17 @@ import { useApi } from 'hooks/useApi';
|
||||
|
||||
const fetchResumeItems = async (
|
||||
api: Api,
|
||||
params?: ItemsApiGetResumeItemsRequest,
|
||||
params?: LibraryApiGetResumeItemsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getItemsApi(api)
|
||||
const response = await getLibraryApi(api)
|
||||
.getResumeItems(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const getResumeItemsQuery = (
|
||||
api?: Api,
|
||||
params?: ItemsApiGetResumeItemsRequest
|
||||
params?: LibraryApiGetResumeItemsRequest
|
||||
) => queryOptions({
|
||||
queryKey: [ 'User', params?.userId, 'ResumeItems', params ],
|
||||
queryFn: ({ signal }) => fetchResumeItems(api!, params, { signal }),
|
||||
@@ -26,7 +26,7 @@ export const getResumeItemsQuery = (
|
||||
});
|
||||
|
||||
export const useResumeItems = (
|
||||
params?: ItemsApiGetResumeItemsRequest
|
||||
params?: LibraryApiGetResumeItemsRequest
|
||||
) => {
|
||||
const { api, user } = useApi();
|
||||
return useQuery(getResumeItemsQuery(api, {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import type { MediaSegmentDto } from '@jellyfin/sdk/lib/generated-client/models/media-segment-dto';
|
||||
import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/media-segment-type';
|
||||
import { getMediaSegmentsApi } from '@jellyfin/sdk/lib/utils/api/media-segments-api';
|
||||
import { getMediaSegmentApi } from '@jellyfin/sdk/lib/utils/api/media-segment-api';
|
||||
|
||||
import type { PlaybackManager } from 'components/playback/playbackmanager';
|
||||
import { TICKS_PER_MILLISECOND, TICKS_PER_SECOND } from 'constants/time';
|
||||
@@ -25,7 +25,7 @@ class MediaSegmentManager extends PlaybackSubscriber {
|
||||
|
||||
private async fetchMediaSegments(api: Api, itemId: string, includeSegmentTypes: MediaSegmentType[]) {
|
||||
try {
|
||||
const { data: mediaSegments } = await getMediaSegmentsApi(api)
|
||||
const { data: mediaSegments } = await getMediaSegmentApi(api)
|
||||
.getItemSegments({ itemId, includeSegmentTypes });
|
||||
this.mediaSegments = mediaSegments.Items || [];
|
||||
} catch (err) {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import { Api } from '@jellyfin/sdk/lib/api';
|
||||
import { ItemsApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/items-api';
|
||||
import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
|
||||
import { LibraryApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { AxiosRequestConfig } from 'axios';
|
||||
import { QUERY_OPTIONS } from '../constants/queryOptions';
|
||||
|
||||
export const fetchItemsByType = async (
|
||||
api: Api,
|
||||
userId?: string,
|
||||
params?: ItemsApiGetItemsRequest,
|
||||
params?: LibraryApiGetItemsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getItemsApi(api).getItems(
|
||||
const response = await getLibraryApi(api).getItems(
|
||||
{
|
||||
...QUERY_OPTIONS,
|
||||
userId,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { ArtistsApiGetArtistsRequest } from '@jellyfin/sdk/lib/generated-client/api/artists-api';
|
||||
import { ArtistApiGetArtistsRequest } from '@jellyfin/sdk/lib/generated-client/api/artist-api';
|
||||
import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type';
|
||||
import { getArtistsApi } from '@jellyfin/sdk/lib/utils/api/artists-api';
|
||||
import { getArtistApi } from '@jellyfin/sdk/lib/utils/api/artist-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -11,10 +11,10 @@ import { isMusic } from '../utils/search';
|
||||
const fetchArtists = async (
|
||||
api: Api,
|
||||
userId: string,
|
||||
params?: ArtistsApiGetArtistsRequest,
|
||||
params?: ArtistApiGetArtistsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getArtistsApi(api).getArtists(
|
||||
const response = await getArtistApi(api).getArtists(
|
||||
{
|
||||
...QUERY_OPTIONS,
|
||||
userId,
|
||||
|
||||
@@ -5,17 +5,17 @@ import { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { QUERY_OPTIONS } from '../constants/queryOptions';
|
||||
import { isMovies, isTVShows } from '../utils/search';
|
||||
import { PersonsApiGetPersonsRequest } from '@jellyfin/sdk/lib/generated-client/api/persons-api';
|
||||
import { getPersonsApi } from '@jellyfin/sdk/lib/utils/api/persons-api';
|
||||
import { PersonApiGetPersonsRequest } from '@jellyfin/sdk/lib/generated-client/api/person-api';
|
||||
import { getPersonApi } from '@jellyfin/sdk/lib/utils/api/person-api';
|
||||
import { PersonKind } from '@jellyfin/sdk/lib/generated-client/models/person-kind';
|
||||
|
||||
const fetchPeople = async (
|
||||
api: Api,
|
||||
userId: string,
|
||||
params?: PersonsApiGetPersonsRequest,
|
||||
params?: PersonApiGetPersonsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getPersonsApi(api).getPersons(
|
||||
const response = await getPersonApi(api).getPersons(
|
||||
{
|
||||
...QUERY_OPTIONS,
|
||||
userId,
|
||||
|
||||
@@ -4,13 +4,13 @@ import { useQuery } from '@tanstack/react-query';
|
||||
import { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
||||
import { ItemsApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/items-api';
|
||||
import { LibraryApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
|
||||
import { fetchItemsByType } from './fetchItemsByType';
|
||||
|
||||
const fetchPrograms = async (
|
||||
api: Api,
|
||||
userId: string,
|
||||
params?: ItemsApiGetItemsRequest,
|
||||
params?: LibraryApiGetItemsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await fetchItemsByType(
|
||||
|
||||
@@ -2,7 +2,7 @@ import type { AxiosRequestConfig } from 'axios';
|
||||
import type { Api } from '@jellyfin/sdk';
|
||||
import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
||||
import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by';
|
||||
import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -13,7 +13,7 @@ const fetchGetItems = async (
|
||||
parentId?: string,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getItemsApi(api).getItems(
|
||||
const response = await getLibraryApi(api).getItems(
|
||||
{
|
||||
userId,
|
||||
sortBy: [ItemSortBy.IsFavoriteOrLiked, ItemSortBy.Random],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type';
|
||||
import { StudiosApiGetStudiosRequest } from '@jellyfin/sdk/lib/generated-client/api/studios-api';
|
||||
import { getStudiosApi } from '@jellyfin/sdk/lib/utils/api/studios-api';
|
||||
import { StudioApiGetStudiosRequest } from '@jellyfin/sdk/lib/generated-client/api/studio-api';
|
||||
import { getStudioApi } from '@jellyfin/sdk/lib/utils/api/studio-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
@@ -11,10 +11,10 @@ import { isMovies, isTVShows } from '../utils/search';
|
||||
const fetchStudios = async (
|
||||
api: Api,
|
||||
userId: string,
|
||||
params?: StudiosApiGetStudiosRequest,
|
||||
params?: StudioApiGetStudiosRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getStudiosApi(api).getStudios(
|
||||
const response = await getStudioApi(api).getStudios(
|
||||
{
|
||||
...QUERY_OPTIONS,
|
||||
userId,
|
||||
|
||||
@@ -4,18 +4,18 @@ import { useQuery } from '@tanstack/react-query';
|
||||
import { AxiosRequestConfig } from 'axios';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import { QUERY_OPTIONS } from '../constants/queryOptions';
|
||||
import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type';
|
||||
import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
||||
import { ItemsApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/items-api';
|
||||
import { LibraryApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
|
||||
|
||||
const fetchVideos = async (
|
||||
api: Api,
|
||||
userId: string,
|
||||
params?: ItemsApiGetItemsRequest,
|
||||
params?: LibraryApiGetItemsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getItemsApi(api).getItems(
|
||||
const response = await getLibraryApi(api).getItems(
|
||||
{
|
||||
...QUERY_OPTIONS,
|
||||
userId,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getQuickConnectApi } from '@jellyfin/sdk/lib/utils/api/quick-connect-api';
|
||||
import { getAuthenticationApi } from '@jellyfin/sdk/lib/utils/api/authentication-api';
|
||||
import React, { FC, FormEvent, useCallback, useState } from 'react';
|
||||
import { Link, useSearchParams } from 'react-router-dom';
|
||||
|
||||
@@ -41,7 +41,7 @@ const QuickConnectPage: FC = () => {
|
||||
const normalizedCode = code.replace(/\s/g, '');
|
||||
console.log('[QuickConnect] authorizing code %s as user %s', normalizedCode, userId);
|
||||
|
||||
getQuickConnectApi(api)
|
||||
getAuthenticationApi(api)
|
||||
.authorizeQuickConnect({
|
||||
code: normalizedCode,
|
||||
userId
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
|
||||
@@ -33,7 +33,7 @@ const getItemByType = async (
|
||||
);
|
||||
break;
|
||||
default: {
|
||||
response = await getUserLibraryApi(api).getItem(
|
||||
response = await getLibraryApi(api).getItem(
|
||||
{ userId: user.Id, itemId },
|
||||
options
|
||||
);
|
||||
|
||||
@@ -3,7 +3,7 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-ite
|
||||
import { LocationType } from '@jellyfin/sdk/lib/generated-client/models/location-type';
|
||||
import { RecordingStatus } from '@jellyfin/sdk/lib/generated-client/models/recording-status';
|
||||
import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type';
|
||||
import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api';
|
||||
import { getPlaylistApi } from '@jellyfin/sdk/lib/utils/api/playlist-api';
|
||||
|
||||
import { appHost } from './apphost';
|
||||
import { AppFeature } from 'constants/appFeature';
|
||||
@@ -167,7 +167,7 @@ export async function canEditPlaylist(user, item) {
|
||||
const api = ServerConnections.getApi(item.ServerId);
|
||||
|
||||
try {
|
||||
const { data: permissions } = await getPlaylistsApi(api)
|
||||
const { data: permissions } = await getPlaylistApi(api)
|
||||
.getPlaylistUser({
|
||||
userId: user.Id,
|
||||
playlistId: item.Id
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import escapeHtml from 'escape-html';
|
||||
|
||||
import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api';
|
||||
import { getLyricApi } from '@jellyfin/sdk/lib/utils/api/lyric-api';
|
||||
import dialogHelper from '../dialogHelper/dialogHelper';
|
||||
import layoutManager from '../layoutManager';
|
||||
import globalize from 'lib/globalize';
|
||||
@@ -26,7 +26,7 @@ let hasChanges;
|
||||
|
||||
function downloadRemoteLyrics(context, id) {
|
||||
const api = ServerConnections.getApi(currentItem.ServerId);
|
||||
getLyricsApi(api).downloadRemoteLyrics({
|
||||
getLyricApi(api).downloadRemoteLyrics({
|
||||
itemId: currentItem.Id,
|
||||
lyricId: id
|
||||
}).then(function () {
|
||||
@@ -127,7 +127,7 @@ function searchForLyrics(context) {
|
||||
loading.show();
|
||||
|
||||
const api = ServerConnections.getApi(currentItem.ServerId);
|
||||
getLyricsApi(api).searchRemoteLyrics({
|
||||
getLyricApi(api).searchRemoteLyrics({
|
||||
itemId: currentItem.Id
|
||||
}).then(function (results) {
|
||||
renderSearchResults(context, results.data);
|
||||
@@ -294,7 +294,7 @@ function onDeleteLyrics(e) {
|
||||
|
||||
function fillCurrentLyrics(context, apiClient, item) {
|
||||
const api = ServerConnections.getApi(apiClient.serverId());
|
||||
getLyricsApi(api).getLyrics({
|
||||
getLyricApi(api).getLyrics({
|
||||
itemId: item.Id
|
||||
}).then((response) => {
|
||||
if (!response.data.Lyrics) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import escapeHtml from 'escape-html';
|
||||
import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api';
|
||||
import { getLyricApi } from '@jellyfin/sdk/lib/utils/api/lyric-api';
|
||||
|
||||
import dialogHelper from '../../components/dialogHelper/dialogHelper';
|
||||
import dom from '../../utils/dom';
|
||||
@@ -92,7 +92,7 @@ async function onSubmit(e) {
|
||||
const api = ServerConnections.getApi(currentServerId);
|
||||
const data = await readFileAsText(file);
|
||||
|
||||
getLyricsApi(api).uploadLyrics({
|
||||
getLyricApi(api).uploadLyrics({
|
||||
itemId: currentItemId,
|
||||
fileName: file.name,
|
||||
body: data
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
||||
import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by';
|
||||
import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
|
||||
import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api';
|
||||
import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { getPlaylistApi } from '@jellyfin/sdk/lib/utils/api/playlist-api';
|
||||
import escapeHtml from 'escape-html';
|
||||
|
||||
import toast from 'components/toast/toast';
|
||||
@@ -95,7 +94,7 @@ function createPlaylist(dlg: DialogElement) {
|
||||
|
||||
if (!api) return Promise.reject(new Error('No Api instance available'));
|
||||
|
||||
return getPlaylistsApi(api)
|
||||
return getPlaylistApi(api)
|
||||
.createPlaylist({
|
||||
createPlaylistDto: {
|
||||
Name: name ?? '',
|
||||
@@ -133,7 +132,7 @@ function updatePlaylist(dlg: DialogElement) {
|
||||
const api = ServerConnections.getApi(currentServerId);
|
||||
if (!api) return Promise.reject(new Error('No Api instance available'));
|
||||
|
||||
return getPlaylistsApi(api)
|
||||
return getPlaylistApi(api)
|
||||
.updatePlaylist({
|
||||
playlistId: dlg.playlistId,
|
||||
updatePlaylistDto: {
|
||||
@@ -166,7 +165,7 @@ function addToPlaylist(dlg: DialogElement, id: string) {
|
||||
|
||||
if (!api) return Promise.reject(new Error('No Api instance available'));
|
||||
|
||||
return getPlaylistsApi(api)
|
||||
return getPlaylistApi(api)
|
||||
.addItemToPlaylist({
|
||||
playlistId: id,
|
||||
ids: itemIds.split(','),
|
||||
@@ -199,7 +198,7 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl
|
||||
|
||||
if (!api) return Promise.reject(new Error('No Api instance available'));
|
||||
|
||||
return getItemsApi(api)
|
||||
return getLibraryApi(api)
|
||||
.getItems({
|
||||
userId: apiClient?.getCurrentUserId(),
|
||||
includeItemTypes: [ BaseItemKind.Playlist ],
|
||||
@@ -217,7 +216,7 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl
|
||||
|
||||
if (!item.Id || !userId) return playlist;
|
||||
|
||||
return getPlaylistsApi(api)
|
||||
return getPlaylistApi(api)
|
||||
.getPlaylistUser({
|
||||
playlistId: item.Id,
|
||||
userId
|
||||
@@ -352,9 +351,9 @@ function initEditor(content: DialogElement, options: PlaylistEditorOptions, item
|
||||
}
|
||||
|
||||
Promise.all([
|
||||
getUserLibraryApi(api)
|
||||
getLibraryApi(api)
|
||||
.getItem({ itemId: options.id }),
|
||||
getPlaylistsApi(api)
|
||||
getPlaylistApi(api)
|
||||
.getPlaylist({ playlistId: options.id })
|
||||
])
|
||||
.then(([ { data: playlistItem }, { data: playlist } ]) => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* "Shortcut" action handlers for BaseItems.
|
||||
*/
|
||||
import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api';
|
||||
import { getPlaylistApi } from '@jellyfin/sdk/lib/utils/api/playlist-api';
|
||||
|
||||
import { EventType } from 'constants/eventType';
|
||||
import { ItemAction } from 'constants/itemAction';
|
||||
@@ -141,7 +141,7 @@ function showContextMenu(card, options = {}) {
|
||||
apiClient?.getCurrentUser(),
|
||||
// Fetch playlist perms if item is a child of a playlist
|
||||
api && playlistId ?
|
||||
getPlaylistsApi(api)
|
||||
getPlaylistApi(api)
|
||||
.getPlaylistUser({
|
||||
playlistId,
|
||||
userId: apiClient?.getCurrentUserId()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import { DisplayPreferencesApiGetDisplayPreferencesRequest } from '@jellyfin/sdk/lib/generated-client/api/display-preferences-api';
|
||||
import { getDisplayPreferencesApi } from '@jellyfin/sdk/lib/utils/api/display-preferences-api';
|
||||
import { DisplayPreferenceApiGetDisplayPreferencesRequest } from '@jellyfin/sdk/lib/generated-client/api/display-preference-api';
|
||||
import { getDisplayPreferenceApi } from '@jellyfin/sdk/lib/utils/api/display-preference-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -8,17 +8,17 @@ import { useApi } from 'hooks/useApi';
|
||||
|
||||
const fetchDisplayPreferences = async (
|
||||
api: Api,
|
||||
params: DisplayPreferencesApiGetDisplayPreferencesRequest,
|
||||
params: DisplayPreferenceApiGetDisplayPreferencesRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getDisplayPreferencesApi(api)
|
||||
const response = await getDisplayPreferenceApi(api)
|
||||
.getDisplayPreferences(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const getDisplayPreferencesQuery = (
|
||||
api?: Api,
|
||||
params?: DisplayPreferencesApiGetDisplayPreferencesRequest
|
||||
params?: DisplayPreferenceApiGetDisplayPreferencesRequest
|
||||
) => queryOptions({
|
||||
queryKey: [ 'User', params?.userId, 'DisplayPreferences', params?.displayPreferencesId, params?.client ],
|
||||
queryFn: ({ signal }) => fetchDisplayPreferences(api!, params!, { signal }),
|
||||
@@ -26,7 +26,7 @@ export const getDisplayPreferencesQuery = (
|
||||
});
|
||||
|
||||
export const useDisplayPreferences = (
|
||||
params: DisplayPreferencesApiGetDisplayPreferencesRequest
|
||||
params: DisplayPreferenceApiGetDisplayPreferencesRequest
|
||||
) => {
|
||||
const { api, user } = useApi();
|
||||
return useQuery(getDisplayPreferencesQuery(api, {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import type { UserViewsApiGetUserViewsRequest } from '@jellyfin/sdk/lib/generated-client/api/user-views-api';
|
||||
import { getUserViewsApi } from '@jellyfin/sdk/lib/utils/api/user-views-api';
|
||||
import type { UserViewApiGetUserViewsRequest } from '@jellyfin/sdk/lib/generated-client/api/user-view-api';
|
||||
import { getUserViewApi } from '@jellyfin/sdk/lib/utils/api/user-view-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -8,17 +8,17 @@ import { useApi } from '../useApi';
|
||||
|
||||
const fetchUserViews = async (
|
||||
api: Api,
|
||||
params?: UserViewsApiGetUserViewsRequest,
|
||||
params?: UserViewApiGetUserViewsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getUserViewsApi(api)
|
||||
const response = await getUserViewApi(api)
|
||||
.getUserViews(params, options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const getUserViewsQuery = (
|
||||
api?: Api,
|
||||
params?: UserViewsApiGetUserViewsRequest
|
||||
params?: UserViewApiGetUserViewsRequest
|
||||
) => queryOptions({
|
||||
queryKey: [ 'User', params?.userId, 'Views', params ],
|
||||
queryFn: ({ signal }) => fetchUserViews(api!, params, { signal }),
|
||||
@@ -26,7 +26,7 @@ export const getUserViewsQuery = (
|
||||
});
|
||||
|
||||
export const useUserViews = (
|
||||
params?: UserViewsApiGetUserViewsRequest
|
||||
params?: UserViewApiGetUserViewsRequest
|
||||
) => {
|
||||
const { api, user } = useApi();
|
||||
return useQuery(getUserViewsQuery(api, {
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
import type { VideosApiDeleteAlternateSourcesRequest } from '@jellyfin/sdk/lib/generated-client/api/videos-api';
|
||||
import { getVideosApi } from '@jellyfin/sdk/lib/utils/api/videos-api';
|
||||
import type { VideoApiDeleteAlternateSourcesRequest } from '@jellyfin/sdk/lib/generated-client/api/video-api';
|
||||
import { getVideoApi } from '@jellyfin/sdk/lib/utils/api/video-api';
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
|
||||
|
||||
const deleteAlternateSources = async (
|
||||
apiContext: JellyfinApiContext,
|
||||
params: VideosApiDeleteAlternateSourcesRequest
|
||||
params: VideoApiDeleteAlternateSourcesRequest
|
||||
) => {
|
||||
const { api } = apiContext;
|
||||
|
||||
if (!api) throw new Error('[deleteAlternateSources] No API instance available');
|
||||
|
||||
const response = await getVideosApi(api).deleteAlternateSources(params);
|
||||
const response = await getVideoApi(api).deleteAlternateSources(params);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const useDeleteAlternateSources = () => {
|
||||
const apiContext = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (params: VideosApiDeleteAlternateSourcesRequest) =>
|
||||
mutationFn: (params: VideoApiDeleteAlternateSourcesRequest) =>
|
||||
deleteAlternateSources(apiContext, params)
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
@@ -7,7 +7,7 @@ import type { AxiosRequestConfig } from 'axios';
|
||||
export const QUERY_KEY = 'Configuration';
|
||||
|
||||
export const fetchConfiguration = async (api: Api, options?: AxiosRequestConfig) => {
|
||||
const response = await getConfigurationApi(api).getConfiguration(options);
|
||||
const response = await getSystemApi(api).getConfiguration(options);
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
+35
-36
@@ -1,6 +1,6 @@
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
import type { ItemsApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/items-api';
|
||||
import type { PlaylistsApiMoveItemRequest } from '@jellyfin/sdk/lib/generated-client/api/playlists-api';
|
||||
import type { LibraryApiGetItemsRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
|
||||
import type { PlaylistApiMoveItemRequest } from '@jellyfin/sdk/lib/generated-client/api/playlist-api';
|
||||
import type { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
||||
import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type';
|
||||
import { ItemFields } from '@jellyfin/sdk/lib/generated-client/models/item-fields';
|
||||
@@ -8,18 +8,17 @@ import { ItemFilter } from '@jellyfin/sdk/lib/generated-client/models/item-filte
|
||||
import { PersonKind } from '@jellyfin/sdk/lib/generated-client/models/person-kind';
|
||||
import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by';
|
||||
import { SortOrder } from '@jellyfin/sdk/lib/generated-client/models/sort-order';
|
||||
import { getArtistsApi } from '@jellyfin/sdk/lib/utils/api/artists-api';
|
||||
import { getArtistApi } from '@jellyfin/sdk/lib/utils/api/artist-api';
|
||||
import { getFilterApi } from '@jellyfin/sdk/lib/utils/api/filter-api';
|
||||
import { getGenresApi } from '@jellyfin/sdk/lib/utils/api/genres-api';
|
||||
import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
|
||||
import { getMoviesApi } from '@jellyfin/sdk/lib/utils/api/movies-api';
|
||||
import { getPersonsApi } from '@jellyfin/sdk/lib/utils/api/persons-api';
|
||||
import { getStudiosApi } from '@jellyfin/sdk/lib/utils/api/studios-api';
|
||||
import { getTvShowsApi } from '@jellyfin/sdk/lib/utils/api/tv-shows-api';
|
||||
import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api';
|
||||
import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api';
|
||||
import { getGenreApi } from '@jellyfin/sdk/lib/utils/api/genre-api';
|
||||
import { getMovieApi } from '@jellyfin/sdk/lib/utils/api/movie-api';
|
||||
import { getPersonApi } from '@jellyfin/sdk/lib/utils/api/person-api';
|
||||
import { getStudioApi } from '@jellyfin/sdk/lib/utils/api/studio-api';
|
||||
import { getShowApi } from '@jellyfin/sdk/lib/utils/api/show-api';
|
||||
import { getPlaylistApi } from '@jellyfin/sdk/lib/utils/api/playlist-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
|
||||
import { getPlaystateApi } from '@jellyfin/sdk/lib/utils/api/playstate-api';
|
||||
import { getUserDataApi } from '@jellyfin/sdk/lib/utils/api/user-data-api';
|
||||
import { useMutation, useQuery } from '@tanstack/react-query';
|
||||
import datetime from 'scripts/datetime';
|
||||
import globalize from 'lib/globalize';
|
||||
@@ -37,12 +36,12 @@ import type { ItemDto } from 'types/base/models/item-dto';
|
||||
|
||||
const fetchGetItems = async (
|
||||
currentApi: JellyfinApiContext,
|
||||
parametersOptions: ItemsApiGetItemsRequest,
|
||||
parametersOptions: LibraryApiGetItemsRequest,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
const response = await getItemsApi(api).getItems(
|
||||
const response = await getLibraryApi(api).getItems(
|
||||
{
|
||||
userId: user.Id,
|
||||
...parametersOptions
|
||||
@@ -55,7 +54,7 @@ const fetchGetItems = async (
|
||||
}
|
||||
};
|
||||
|
||||
export const useGetItems = (parametersOptions: ItemsApiGetItemsRequest) => {
|
||||
export const useGetItems = (parametersOptions: LibraryApiGetItemsRequest) => {
|
||||
const currentApi = useApi();
|
||||
const isRandom = Boolean(parametersOptions.sortBy?.includes(ItemSortBy.Random));
|
||||
|
||||
@@ -82,7 +81,7 @@ const fetchGetMovieRecommendations = async (
|
||||
) => {
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
const response = await getMoviesApi(api).getMovieRecommendations(
|
||||
const response = await getMovieApi(api).getMovieRecommendations(
|
||||
{
|
||||
userId: user.Id,
|
||||
fields: [
|
||||
@@ -118,7 +117,7 @@ const fetchGetGenres = async (
|
||||
) => {
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
const response = await getGenresApi(api).getGenres(
|
||||
const response = await getGenreApi(api).getGenres(
|
||||
{
|
||||
userId: user.Id,
|
||||
sortBy: [ItemSortBy.SortName],
|
||||
@@ -153,7 +152,7 @@ const fetchGetStudios = async (
|
||||
) => {
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
const response = await getStudiosApi(api).getStudios(
|
||||
const response = await getStudioApi(api).getStudios(
|
||||
{
|
||||
userId: user.Id,
|
||||
includeItemTypes: itemType,
|
||||
@@ -236,7 +235,7 @@ const fetchGetItemsViewByType = async (
|
||||
let response;
|
||||
switch (viewType) {
|
||||
case LibraryTab.AlbumArtists: {
|
||||
response = await getArtistsApi(api).getAlbumArtists(
|
||||
response = await getArtistApi(api).getAlbumArtists(
|
||||
{
|
||||
userId: user.Id,
|
||||
parentId: parentId ?? undefined,
|
||||
@@ -257,7 +256,7 @@ const fetchGetItemsViewByType = async (
|
||||
break;
|
||||
}
|
||||
case LibraryTab.Artists: {
|
||||
response = await getArtistsApi(api).getArtists(
|
||||
response = await getArtistApi(api).getArtists(
|
||||
{
|
||||
userId: user.Id,
|
||||
parentId: parentId ?? undefined,
|
||||
@@ -278,7 +277,7 @@ const fetchGetItemsViewByType = async (
|
||||
break;
|
||||
}
|
||||
case LibraryTab.Authors: {
|
||||
response = await getPersonsApi(api).getPersons(
|
||||
response = await getPersonApi(api).getPersons(
|
||||
{
|
||||
userId: user.Id,
|
||||
parentId: parentId ?? undefined,
|
||||
@@ -297,7 +296,7 @@ const fetchGetItemsViewByType = async (
|
||||
break;
|
||||
}
|
||||
case LibraryTab.Studios:
|
||||
response = await getStudiosApi(api).getStudios(
|
||||
response = await getStudioApi(api).getStudios(
|
||||
{
|
||||
userId: user.Id,
|
||||
parentId: parentId ?? undefined,
|
||||
@@ -330,7 +329,7 @@ const fetchGetItemsViewByType = async (
|
||||
break;
|
||||
}
|
||||
case LibraryTab.Folders: {
|
||||
response = await getItemsApi(api).getItems(
|
||||
response = await getLibraryApi(api).getItems(
|
||||
{
|
||||
userId: user.Id,
|
||||
recursive: false,
|
||||
@@ -366,7 +365,7 @@ const fetchGetItemsViewByType = async (
|
||||
);
|
||||
break;
|
||||
default: {
|
||||
response = await getItemsApi(api).getItems(
|
||||
response = await getLibraryApi(api).getItems(
|
||||
{
|
||||
userId: user.Id,
|
||||
recursive: true,
|
||||
@@ -454,11 +453,11 @@ export const useGetItemsViewByType = (
|
||||
|
||||
const fetchPlaylistsMoveItem = async (
|
||||
currentApi: JellyfinApiContext,
|
||||
requestParameters: PlaylistsApiMoveItemRequest
|
||||
requestParameters: PlaylistApiMoveItemRequest
|
||||
) => {
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
const response = await getPlaylistsApi(api).moveItem({
|
||||
const response = await getPlaylistApi(api).moveItem({
|
||||
...requestParameters
|
||||
});
|
||||
return response.data;
|
||||
@@ -468,7 +467,7 @@ const fetchPlaylistsMoveItem = async (
|
||||
export const usePlaylistsMoveItemMutation = () => {
|
||||
const currentApi = useApi();
|
||||
return useMutation({
|
||||
mutationFn: (requestParameters: PlaylistsApiMoveItemRequest) =>
|
||||
mutationFn: (requestParameters: PlaylistApiMoveItemRequest) =>
|
||||
fetchPlaylistsMoveItem(currentApi, requestParameters )
|
||||
});
|
||||
};
|
||||
@@ -528,7 +527,7 @@ const fetchGetGroupsUpcomingEpisodes = async (
|
||||
) => {
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
const response = await getTvShowsApi(api).getUpcomingEpisodes(
|
||||
const response = await getShowApi(api).getUpcomingEpisodes(
|
||||
{
|
||||
userId: user.Id,
|
||||
limit: 25,
|
||||
@@ -574,13 +573,13 @@ const fetchUpdateFavoriteStatus = async (
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
if (isFavorite) {
|
||||
const response = await getUserLibraryApi(api).unmarkFavoriteItem({
|
||||
const response = await getUserDataApi(api).unmarkFavoriteItem({
|
||||
userId: user.Id,
|
||||
itemId: itemId
|
||||
});
|
||||
return response.data.IsFavorite;
|
||||
} else {
|
||||
const response = await getUserLibraryApi(api).markFavoriteItem({
|
||||
const response = await getUserDataApi(api).markFavoriteItem({
|
||||
userId: user.Id,
|
||||
itemId: itemId
|
||||
});
|
||||
@@ -610,13 +609,13 @@ const fetchUpdatePlayedState = async (
|
||||
const { api, user } = currentApi;
|
||||
if (api && user?.Id) {
|
||||
if (isPlayed) {
|
||||
const response = await getPlaystateApi(api).markUnplayedItem({
|
||||
const response = await getUserDataApi(api).markUnplayedItem({
|
||||
userId: user.Id,
|
||||
itemId: itemId
|
||||
});
|
||||
return response.data.Played;
|
||||
} else {
|
||||
const response = await getPlaystateApi(api).markPlayedItem({
|
||||
const response = await getUserDataApi(api).markPlayedItem({
|
||||
userId: user.Id,
|
||||
itemId: itemId
|
||||
});
|
||||
@@ -809,7 +808,7 @@ const fetchGetSectionItems = async (
|
||||
}
|
||||
case SectionApiMethod.NextUp: {
|
||||
response = (
|
||||
await getTvShowsApi(api).getNextUp(
|
||||
await getShowApi(api).getNextUp(
|
||||
{
|
||||
userId: user.Id,
|
||||
limit: 25,
|
||||
@@ -836,7 +835,7 @@ const fetchGetSectionItems = async (
|
||||
}
|
||||
case SectionApiMethod.ResumeItems: {
|
||||
response = (
|
||||
await getItemsApi(api).getResumeItems(
|
||||
await getLibraryApi(api).getResumeItems(
|
||||
{
|
||||
userId: user.Id,
|
||||
parentId: parentId ?? undefined,
|
||||
@@ -862,7 +861,7 @@ const fetchGetSectionItems = async (
|
||||
}
|
||||
case SectionApiMethod.LatestMedia: {
|
||||
response = (
|
||||
await getUserLibraryApi(api).getLatestMedia(
|
||||
await getLibraryApi(api).getLatestMedia(
|
||||
{
|
||||
userId: user.Id,
|
||||
fields: [
|
||||
@@ -883,7 +882,7 @@ const fetchGetSectionItems = async (
|
||||
}
|
||||
default: {
|
||||
response = (
|
||||
await getItemsApi(api).getItems(
|
||||
await getLibraryApi(api).getItems(
|
||||
{
|
||||
userId: user.Id,
|
||||
parentId: parentId ?? undefined,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { Api } from '@jellyfin/sdk/lib/api';
|
||||
import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api';
|
||||
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
|
||||
import { queryOptions, useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -12,7 +12,7 @@ const fetchItem = async (
|
||||
userId: string,
|
||||
options?: AxiosRequestConfig
|
||||
) => {
|
||||
const response = await getUserLibraryApi(api)
|
||||
const response = await getLibraryApi(api)
|
||||
.getItem({ userId, itemId }, options);
|
||||
return response.data as ItemDto;
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Api } from '@jellyfin/sdk';
|
||||
import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api';
|
||||
import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useApi } from 'hooks/useApi';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
@@ -11,7 +11,7 @@ export interface NamedConfiguration {
|
||||
}
|
||||
|
||||
const fetchNamedConfiguration = async (api: Api, key: string, options?: AxiosRequestConfig) => {
|
||||
const response = await getConfigurationApi(api).getNamedConfiguration({ key }, options);
|
||||
const response = await getSystemApi(api).getNamedConfiguration({ key }, options);
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getQuickConnectApi } from '@jellyfin/sdk/lib/utils/api/quick-connect-api';
|
||||
import { getAuthenticationApi } from '@jellyfin/sdk/lib/utils/api/authentication-api';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import type { AxiosRequestConfig } from 'axios';
|
||||
|
||||
@@ -11,7 +11,7 @@ const fetchQuickConnectEnabled = async (
|
||||
const { api } = apiContext;
|
||||
if (!api) throw new Error('No API instance available');
|
||||
|
||||
const response = await getQuickConnectApi(api)
|
||||
const response = await getAuthenticationApi(api)
|
||||
.getQuickConnectEnabled(options);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api';
|
||||
import { getPlaylistApi } from '@jellyfin/sdk/lib/utils/api/playlist-api';
|
||||
|
||||
import listView from 'components/listview/listview';
|
||||
import { ServerConnections } from 'lib/jellyfin-apiclient';
|
||||
@@ -39,7 +39,7 @@ async function init(page, item) {
|
||||
}
|
||||
|
||||
let isEditable = false;
|
||||
const { data } = await getPlaylistsApi(api)
|
||||
const { data } = await getPlaylistApi(api)
|
||||
.getPlaylistUser({
|
||||
playlistId: item.Id,
|
||||
userId: apiClient.getCurrentUserId()
|
||||
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type';
|
||||
import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
||||
import type { DeviceInfo } from '@jellyfin/sdk/lib/generated-client/models/device-info';
|
||||
import type { SessionInfo } from '@jellyfin/sdk/lib/generated-client/models/session-info';
|
||||
import type { DeviceInfoDto } from '@jellyfin/sdk/lib/generated-client/models/device-info-dto';
|
||||
import type { SessionInfoDto } from '@jellyfin/sdk/lib/generated-client/models/session-info-dto';
|
||||
|
||||
const BASE_DEVICE_IMAGE_URL = 'assets/img/devices/';
|
||||
|
||||
@@ -40,8 +40,8 @@ function getWebDeviceIcon(browser: string | null | undefined) {
|
||||
}
|
||||
}
|
||||
|
||||
export function getDeviceIcon(info: DeviceInfo | SessionInfo) {
|
||||
switch ((info as DeviceInfo).AppName || (info as SessionInfo).Client) {
|
||||
export function getDeviceIcon(info: DeviceInfoDto | SessionInfoDto) {
|
||||
switch ((info as DeviceInfoDto).AppName || (info as SessionInfoDto).Client) {
|
||||
case 'Samsung Smart TV':
|
||||
return BASE_DEVICE_IMAGE_URL + 'samsungtv.svg';
|
||||
case 'Xbox One':
|
||||
@@ -82,7 +82,7 @@ export function getDeviceIcon(info: DeviceInfo | SessionInfo) {
|
||||
case 'Finamp':
|
||||
return BASE_DEVICE_IMAGE_URL + 'finamp.svg';
|
||||
case 'Jellyfin Web':
|
||||
return getWebDeviceIcon((info as DeviceInfo).Name || (info as SessionInfo).DeviceName);
|
||||
return getWebDeviceIcon((info as DeviceInfoDto).Name || (info as SessionInfoDto).DeviceName);
|
||||
default:
|
||||
if (info.Capabilities?.IconUrl) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user