diff --git a/components/settings/SettingToggles.tsx b/components/settings/SettingToggles.tsx index 2f55edaf..73d197a6 100644 --- a/components/settings/SettingToggles.tsx +++ b/components/settings/SettingToggles.tsx @@ -21,9 +21,8 @@ import * as BackgroundFetch from "expo-background-fetch"; import * as ScreenOrientation from "expo-screen-orientation"; import * as TaskManager from "expo-task-manager"; import { useAtom } from "jotai"; -import React, {useCallback, useEffect, useState} from "react"; +import React, {useCallback, useEffect, useRef, useState} from "react"; import { - Alert, Linking, Switch, TouchableOpacity, @@ -59,7 +58,10 @@ export const SettingToggles: React.FC = ({ ...props }) => { const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); + const jellyseerrPassInputRef = useRef(null); const [marlinUrl, setMarlinUrl] = useState(""); + const [promptForJellyseerrPass, setPromptForJellyseerrPass] = useState(false); + const [isJellyseerrLoading, setIsLoadingJellyseerr] = useState(false); const [jellyseerrPassword, setJellyseerrPassword] = useState(undefined); const [optimizedVersionsServerUrl, setOptimizedVersionsServerUrl] = useState(settings?.optimizedVersionsServerUrl || ""); @@ -121,39 +123,9 @@ export const SettingToggles: React.FC = ({ ...props }) => { staleTime: 0, }); - const promptForJellyseerrLogin = useCallback(() => - Alert.prompt( - 'Enter jellyfin password', - `Enter password for jellyfin user ${user?.Name}`, - (input) => setJellyseerrPassword(input), - 'secure-text' - ), - [user, setJellyseerrPassword] - ); - - const testJellyseerrServerUrl = useCallback(async () => { - if (!jellyseerrServerUrl || jellyseerrApi) - return; - - const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl); - - jellyseerrTempApi.test().then(result => { - if (result.isValid) { - - if (result.requiresPass) - promptForJellyseerrLogin() - else - updateSettings({jellyseerrServerUrl}) - } - else { - setjellyseerrServerUrl(undefined); - clearAllJellyseerData(); - } - }) - }, [jellyseerrServerUrl]) - - useEffect(() => { + const loginToJellyseerr = useCallback(() => { if (jellyseerrServerUrl && user?.Name && jellyseerrPassword) { + setIsLoadingJellyseerr(true) const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl); jellyseerrTempApi.login(user?.Name, jellyseerrPassword) .then(user => { @@ -165,10 +137,35 @@ export const SettingToggles: React.FC = ({ ...props }) => { }) .finally(() => { setJellyseerrPassword(undefined); + setPromptForJellyseerrPass(false) + setIsLoadingJellyseerr(false) }) } }, [user, jellyseerrServerUrl, jellyseerrPassword]); + const testJellyseerrServerUrl = useCallback(async () => { + if (!jellyseerrServerUrl || jellyseerrApi) + return; + + setIsLoadingJellyseerr(true) + const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl); + + jellyseerrTempApi.test().then(result => { + if (result.isValid) { + if (result.requiresPass) + setPromptForJellyseerrPass(true) + // promptForJellyseerrLogin() + else + updateSettings({jellyseerrServerUrl}) + } + else { + setPromptForJellyseerrPass(false) + setjellyseerrServerUrl(undefined); + clearAllJellyseerData(); + } + }).finally(() => setIsLoadingJellyseerr(false)) + }, [jellyseerrServerUrl]) + if (!settings) return null; return ( @@ -697,7 +694,7 @@ export const SettingToggles: React.FC = ({ ...props }) => { Jellyseerr - + {jellyseerrUser && <> @@ -718,7 +715,7 @@ export const SettingToggles: React.FC = ({ ...props }) => { : "opacity-50" }`} > - + @@ -741,17 +738,49 @@ export const SettingToggles: React.FC = ({ ...props }) => { textContentType="URL" onChangeText={setjellyseerrServerUrl} /> + + {promptForJellyseerrPass && + + } + {isJellyseerrLoading && + + }