diff --git a/api/client.ts b/api/client.ts index 4542b7e6..c2d137a5 100644 --- a/api/client.ts +++ b/api/client.ts @@ -1 +1,19 @@ -// TODO: Create client singleton here \ No newline at end of file +import { Api, Jellyfin } from "@jellyfin/sdk"; +import { getDeviceNameSync, getUniqueIdSync } from "react-native-device-info"; +import { name, version } from "../package.json" + +export const client : Jellyfin = new Jellyfin({ + clientInfo: { + name: name, + version: version + }, + deviceInfo: { + name: getDeviceNameSync(), + id: getUniqueIdSync() + } +}); + +export function buildApiClient (serverUrl : string): Api { + let jellyfin = new Jellyfin(client); + return jellyfin.createApi(serverUrl); +} \ No newline at end of file diff --git a/api/mutators/functions/storage.ts b/api/mutators/functions/storage.ts index 1b25ea6f..d48cda0f 100644 --- a/api/mutators/functions/storage.ts +++ b/api/mutators/functions/storage.ts @@ -1,12 +1,11 @@ -import { Jellyfin } from "@jellyfin/sdk/lib/jellyfin"; import { fetchServer } from "../../queries/functions/storage"; import { JellyfinCredentials } from "../../types/jellyfin-credentials"; import * as Keychain from "react-native-keychain" import { getSystemApi } from "@jellyfin/sdk/lib/utils/api/system-api"; -import { client } from "../../queries"; import { JellifyServer } from "../../../types/JellifyServer"; import AsyncStorage from "@react-native-async-storage/async-storage"; import { AsyncStorageKeys } from "../../../enums/async-storage-keys"; +import { buildApiClient } from "../../client"; interface ServerMutationParams { serverUrl: string, @@ -19,11 +18,10 @@ export const serverMutation = async (serverUrl: string) => { if (!!!serverUrl) throw Error("Server URL is empty") - let jellyfin = new Jellyfin(client); - let api = jellyfin.createApi(serverUrl); + const api = buildApiClient(serverUrl); console.log(`Created API client for ${api.basePath}`) - return await getSystemApi(api).getPublicSystemInfo() + return await getSystemApi(api).getPublicSystemInfo(); } export const mutateServer = async (server: JellifyServer | undefined) => { diff --git a/api/queries.ts b/api/queries.ts index b974d1c2..c01aca35 100644 --- a/api/queries.ts +++ b/api/queries.ts @@ -1,21 +1,7 @@ -import { Jellyfin } from "@jellyfin/sdk" import { useQuery } from "@tanstack/react-query"; -import { getDeviceNameSync, getUniqueIdSync } from "react-native-device-info" import { QueryKeys } from "../enums/query-keys"; -import { name, version } from "../package.json" import { createApi, createPublicApi } from "./queries/functions/api"; -export const client : Jellyfin = new Jellyfin({ - clientInfo: { - name: name, - version: version - }, - deviceInfo: { - name: getDeviceNameSync(), - id: getUniqueIdSync() - } -}); - export const usePublicApi = (serverUrl: string) => useQuery({ queryKey: [QueryKeys.PublicApi, serverUrl], queryFn: ({ queryKey }) => { diff --git a/components/Login/component.tsx b/components/Login/component.tsx index 4404318b..cb822f74 100644 --- a/components/Login/component.tsx +++ b/components/Login/component.tsx @@ -7,14 +7,14 @@ import ServerLibrary from "./helpers/server-library"; export default function Login(): React.JSX.Element { - const { server, username } = useApiClientContext(); + const { server, changeServer, username } = useApiClientContext(); const Stack = createStackNavigator(); return ( { - (_.isUndefined(server) || _.isEmpty(server.url)) ? ( + (_.isUndefined(server) || _.isEmpty(server.url) || changeServer) ? ( { diff --git a/components/Login/helpers/server-authentication.tsx b/components/Login/helpers/server-authentication.tsx index 0204bf5b..232e6d35 100644 --- a/components/Login/helpers/server-authentication.tsx +++ b/components/Login/helpers/server-authentication.tsx @@ -6,9 +6,9 @@ import { useApiClientContext } from "../../jellyfin-api-provider"; import { jellifyStyles } from "../../styles"; import _ from "lodash"; import * as Keychain from "react-native-keychain" -import { client } from "../../../api/queries"; import { JellyfinCredentials } from "../../../api/types/jellyfin-credentials"; -import { Button, Input, Paragraph, View } from "tamagui"; +import { Button, H2, Input, Paragraph, View } from "tamagui"; +import { client } from "../../../api/client"; export default function ServerAuthentication(): React.JSX.Element { const [username, setUsername] = React.useState(''); @@ -45,16 +45,18 @@ export default function ServerAuthentication(): React.JSX.Element { const clearServer = useMutation({ mutationFn: async () => { - setServer(undefined); setContextUsername(undefined); setChangeServer(true); - return await AsyncStorage.setItem(AsyncStorageKeys.ServerUrl, ""); + return Promise.resolve(); } }); return ( - - Sign in to {server?.name ?? "Jellyfin"} + +

+ + Sign in to {server?.name ?? "Jellyfin"} +