diff --git a/src/apiclient.d.ts b/src/apiclient.d.ts index fdb5df58c..f250ccfce 100644 --- a/src/apiclient.d.ts +++ b/src/apiclient.d.ts @@ -67,7 +67,7 @@ declare module 'jellyfin-apiclient' { UtcTimeResponse, VirtualFolderInfo } from '@jellyfin/sdk/lib/generated-client'; - import { ConnectionState } from './utils/jellyfin-apiclient/ConnectionState'; + import type { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; class ApiClient { constructor(serverAddress: string, appName: string, appVersion: string, deviceName: string, deviceId: string); diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index 61c7cbcd8..305aeb7db 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -3,7 +3,7 @@ import { Outlet, useLocation, useNavigate } from 'react-router-dom'; import type { ApiClient, ConnectResponse } from 'jellyfin-apiclient'; import globalize from 'lib/globalize'; -import { ConnectionState } from 'utils/jellyfin-apiclient/ConnectionState'; +import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; import alert from './alert'; import Loading from './loading/LoadingComponent'; diff --git a/src/controllers/session/addServer/index.js b/src/controllers/session/addServer/index.js index 3e10dd629..251d7ae67 100644 --- a/src/controllers/session/addServer/index.js +++ b/src/controllers/session/addServer/index.js @@ -4,7 +4,7 @@ import globalize from '../../../lib/globalize'; import '../../../elements/emby-button/emby-button'; import Dashboard from '../../../utils/dashboard'; import ServerConnections from '../../../components/ServerConnections'; -import { ConnectionState } from '../../../utils/jellyfin-apiclient/ConnectionState.ts'; +import { ConnectionState } from '../../../lib/jellyfin-apiclient/connectionState'; function handleConnectionResult(page, result) { loading.hide(); diff --git a/src/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 577c897ba..7770b64cb 100644 --- a/src/controllers/session/selectServer/index.js +++ b/src/controllers/session/selectServer/index.js @@ -19,7 +19,7 @@ import '../../../elements/emby-button/emby-button'; import Dashboard from '../../../utils/dashboard'; import ServerConnections from '../../../components/ServerConnections'; import alert from '../../../components/alert'; -import { ConnectionState } from '../../../utils/jellyfin-apiclient/ConnectionState.ts'; +import { ConnectionState } from '../../../lib/jellyfin-apiclient/connectionState'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 5ec514b18..e7d60e41d 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -2,13 +2,10 @@ import { ApiClient } from 'jellyfin-apiclient'; import events from 'utils/events'; -const defaultTimeout = 20000; +import { ConnectionMode } from './connectionMode'; +import { ConnectionState } from './connectionState'; -const ConnectionMode = { - Local: 0, - Remote: 1, - Manual: 2 -}; +const defaultTimeout = 20000; function getServerAddress(server, mode) { switch (mode) { @@ -38,7 +35,7 @@ function paramsToString(params) { function resolveFailure(instance, resolve) { resolve({ - State: 'Unavailable' + State: ConnectionState.Unavailable }); } @@ -563,8 +560,8 @@ export default class ConnectionManager { // See if we have any saved credentials and can auto sign in if (firstServer) { return self.connectToServer(firstServer, options).then((result) => { - if (result.State === 'Unavailable') { - result.State = 'ServerSelection'; + if (result.State === ConnectionState.Unavailable) { + result.State = ConnectionState.ServerSelection; } console.log('resolving connectToServers with result.State: ' + result.State); @@ -574,7 +571,7 @@ export default class ConnectionManager { return Promise.resolve({ Servers: servers, - State: 'ServerSelection' + State: ConnectionState.ServerSelection }); }; @@ -684,7 +681,7 @@ export default class ConnectionManager { if (compareVersions(self.minServerVersion(), result.Version) === 1) { console.log('minServerVersion requirement not met. Server version: ' + result.Version); resolve({ - State: 'ServerUpdateNeeded', + State: ConnectionState.ServerUpdateNeeded, Servers: [server] }); } else if (server.Id && result.Id !== server.Id) { @@ -735,7 +732,7 @@ export default class ConnectionManager { result.ApiClient.setSystemInfo(systemInfo); result.SystemInfo = systemInfo; - result.State = server.AccessToken && options.enableAutoLogin !== false ? 'SignedIn' : 'ServerSignIn'; + result.State = server.AccessToken && options.enableAutoLogin !== false ? ConnectionState.SignedIn : ConnectionState.ServerSignIn; result.Servers.push(server); @@ -751,7 +748,7 @@ export default class ConnectionManager { events.trigger(self, 'connected', [result]); }; - if (result.State === 'SignedIn') { + if (result.State === ConnectionState.SignedIn) { afterConnected(result.ApiClient, options); result.ApiClient.getCurrentUser().then((user) => { @@ -769,8 +766,8 @@ export default class ConnectionManager { }; return self.connectToServer(server, options).then((result) => { - // connectToServer never rejects, but resolves with State='Unavailable' - if (result.State === 'Unavailable') { + // connectToServer never rejects, but resolves with State=ConnectionState.Unavailable + if (result.State === ConnectionState.Unavailable) { return Promise.reject(); } return result; @@ -804,7 +801,7 @@ export default class ConnectionManager { } return Promise.resolve({ - State: 'Unavailable' + State: ConnectionState.Unavailable }); } @@ -875,6 +872,11 @@ export default class ConnectionManager { return this._apiClients; } + /** + * Gets the ApiClient for a given BaseItem or ServerId. + * @param {import('@jellyfin/sdk/lib/generated-client').BaseItemDto | string | undefined} item + * @returns {ApiClient} + */ getApiClient(item) { if (!item) { throw new Error('item or serverId cannot be null'); diff --git a/src/lib/jellyfin-apiclient/connectionMode.ts b/src/lib/jellyfin-apiclient/connectionMode.ts new file mode 100644 index 000000000..934ce3594 --- /dev/null +++ b/src/lib/jellyfin-apiclient/connectionMode.ts @@ -0,0 +1,5 @@ +export const enum ConnectionMode { + Local = 0, + Remote = 1, + Manual = 2 +} diff --git a/src/utils/jellyfin-apiclient/ConnectionState.ts b/src/lib/jellyfin-apiclient/connectionState.ts similarity index 88% rename from src/utils/jellyfin-apiclient/ConnectionState.ts rename to src/lib/jellyfin-apiclient/connectionState.ts index 134a7ffce..03ff95dc5 100644 --- a/src/utils/jellyfin-apiclient/ConnectionState.ts +++ b/src/lib/jellyfin-apiclient/connectionState.ts @@ -1,7 +1,7 @@ /** * Server state values for a connected server used by jellyfin-apiclient. */ -export enum ConnectionState { +export const enum ConnectionState { SignedIn = 'SignedIn', ServerSignIn = 'ServerSignIn', ServerSelection = 'ServerSelection',