mirror of
https://github.com/streamyfin/streamyfin.git
synced 2025-08-20 18:37:18 +02:00
fix: jellyseerr better login
This commit is contained in:
@@ -209,7 +209,12 @@ export default function search() {
|
|||||||
paddingRight: insets.right,
|
paddingRight: insets.right,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<View className="flex flex-col">
|
<View
|
||||||
|
className="flex flex-col"
|
||||||
|
style={{
|
||||||
|
marginTop: Platform.OS === "android" ? 16 : 0,
|
||||||
|
}}
|
||||||
|
>
|
||||||
{jellyseerrApi && (
|
{jellyseerrApi && (
|
||||||
<View className="flex flex-row flex-wrap space-x-2 px-4 mb-2">
|
<View className="flex flex-row flex-wrap space-x-2 px-4 mb-2">
|
||||||
<TouchableOpacity onPress={() => setSearchType("Library")}>
|
<TouchableOpacity onPress={() => setSearchType("Library")}>
|
||||||
|
|||||||
@@ -317,7 +317,9 @@ const Login: React.FC = () => {
|
|||||||
<Button
|
<Button
|
||||||
loading={loadingServerCheck}
|
loading={loadingServerCheck}
|
||||||
disabled={loadingServerCheck}
|
disabled={loadingServerCheck}
|
||||||
onPress={async () => await handleConnect(serverURL)}
|
onPress={async () => {
|
||||||
|
await handleConnect(serverURL);
|
||||||
|
}}
|
||||||
className="w-full grow"
|
className="w-full grow"
|
||||||
>
|
>
|
||||||
{t("server.connect_button")}
|
{t("server.connect_button")}
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ export const JellyseerrSettings = () => {
|
|||||||
const [user] = useAtom(userAtom);
|
const [user] = useAtom(userAtom);
|
||||||
const [settings, updateSettings, pluginSettings] = useSettings();
|
const [settings, updateSettings, pluginSettings] = useSettings();
|
||||||
|
|
||||||
const [promptForJellyseerrPass, setPromptForJellyseerrPass] =
|
|
||||||
useState<boolean>(false);
|
|
||||||
|
|
||||||
const [jellyseerrPassword, setJellyseerrPassword] = useState<
|
const [jellyseerrPassword, setJellyseerrPassword] = useState<
|
||||||
string | undefined
|
string | undefined
|
||||||
>(undefined);
|
>(undefined);
|
||||||
@@ -39,10 +36,22 @@ export const JellyseerrSettings = () => {
|
|||||||
|
|
||||||
const loginToJellyseerrMutation = useMutation({
|
const loginToJellyseerrMutation = useMutation({
|
||||||
mutationFn: async () => {
|
mutationFn: async () => {
|
||||||
if (!jellyseerrServerUrl || !user?.Name || !jellyseerrPassword) {
|
if (!jellyseerrServerUrl && !settings?.jellyseerrServerUrl) {
|
||||||
|
throw new Error("Missing server url");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!user?.Name || !jellyseerrPassword) {
|
||||||
throw new Error("Missing required information for login");
|
throw new Error("Missing required information for login");
|
||||||
}
|
}
|
||||||
const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl);
|
const jellyseerrTempApi = new JellyseerrApi(
|
||||||
|
jellyseerrServerUrl || settings.jellyseerrServerUrl || ""
|
||||||
|
);
|
||||||
|
const testResult = await jellyseerrTempApi.test();
|
||||||
|
|
||||||
|
if (!testResult.isValid) {
|
||||||
|
throw new Error("Invalid server url");
|
||||||
|
}
|
||||||
|
|
||||||
return jellyseerrTempApi.login(user.Name, jellyseerrPassword);
|
return jellyseerrTempApi.login(user.Name, jellyseerrPassword);
|
||||||
},
|
},
|
||||||
onSuccess: (user) => {
|
onSuccess: (user) => {
|
||||||
@@ -57,31 +66,11 @@ export const JellyseerrSettings = () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const testJellyseerrServerUrlMutation = useMutation({
|
|
||||||
mutationFn: async () => {
|
|
||||||
if (!jellyseerrServerUrl || jellyseerrApi) return null;
|
|
||||||
const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl);
|
|
||||||
return jellyseerrTempApi.test();
|
|
||||||
},
|
|
||||||
onSuccess: (result) => {
|
|
||||||
if (result && result.isValid) {
|
|
||||||
if (result.requiresPass) {
|
|
||||||
setPromptForJellyseerrPass(true);
|
|
||||||
} else {
|
|
||||||
updateSettings({ jellyseerrServerUrl });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setPromptForJellyseerrPass(false);
|
|
||||||
setjellyseerrServerUrl(undefined);
|
|
||||||
clearAllJellyseerData();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const clearData = () => {
|
const clearData = () => {
|
||||||
clearAllJellyseerData().finally(() => {
|
clearAllJellyseerData().finally(() => {
|
||||||
|
setJellyseerrUser(undefined);
|
||||||
|
setJellyseerrPassword(undefined);
|
||||||
setjellyseerrServerUrl(undefined);
|
setjellyseerrServerUrl(undefined);
|
||||||
setPromptForJellyseerrPass(false);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -92,34 +81,46 @@ export const JellyseerrSettings = () => {
|
|||||||
<>
|
<>
|
||||||
<ListGroup title={"Jellyseerr"}>
|
<ListGroup title={"Jellyseerr"}>
|
||||||
<ListItem
|
<ListItem
|
||||||
title={t("home.settings.plugins.jellyseerr.total_media_requests")}
|
title={t(
|
||||||
|
"home.settings.plugins.jellyseerr.total_media_requests"
|
||||||
|
)}
|
||||||
value={jellyseerrUser?.requestCount?.toString()}
|
value={jellyseerrUser?.requestCount?.toString()}
|
||||||
/>
|
/>
|
||||||
<ListItem
|
<ListItem
|
||||||
title={t("home.settings.plugins.jellyseerr.movie_quota_limit")}
|
title={t("home.settings.plugins.jellyseerr.movie_quota_limit")}
|
||||||
value={
|
value={
|
||||||
jellyseerrUser?.movieQuotaLimit?.toString() ?? t("home.settings.plugins.jellyseerr.unlimited")
|
jellyseerrUser?.movieQuotaLimit?.toString() ??
|
||||||
|
t("home.settings.plugins.jellyseerr.unlimited")
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<ListItem
|
<ListItem
|
||||||
title={t("home.settings.plugins.jellyseerr.movie_quota_days")}
|
title={t("home.settings.plugins.jellyseerr.movie_quota_days")}
|
||||||
value={
|
value={
|
||||||
jellyseerrUser?.movieQuotaDays?.toString() ?? t("home.settings.plugins.jellyseerr.unlimited")
|
jellyseerrUser?.movieQuotaDays?.toString() ??
|
||||||
|
t("home.settings.plugins.jellyseerr.unlimited")
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<ListItem
|
<ListItem
|
||||||
title={t("home.settings.plugins.jellyseerr.tv_quota_limit")}
|
title={t("home.settings.plugins.jellyseerr.tv_quota_limit")}
|
||||||
value={jellyseerrUser?.tvQuotaLimit?.toString() ?? t("home.settings.plugins.jellyseerr.unlimited")}
|
value={
|
||||||
|
jellyseerrUser?.tvQuotaLimit?.toString() ??
|
||||||
|
t("home.settings.plugins.jellyseerr.unlimited")
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
<ListItem
|
<ListItem
|
||||||
title={t("home.settings.plugins.jellyseerr.tv_quota_days")}
|
title={t("home.settings.plugins.jellyseerr.tv_quota_days")}
|
||||||
value={jellyseerrUser?.tvQuotaDays?.toString() ?? t("home.settings.plugins.jellyseerr.unlimited")}
|
value={
|
||||||
|
jellyseerrUser?.tvQuotaDays?.toString() ??
|
||||||
|
t("home.settings.plugins.jellyseerr.unlimited")
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</ListGroup>
|
</ListGroup>
|
||||||
|
|
||||||
<View className="p-4">
|
<View className="p-4">
|
||||||
<Button color="red" onPress={clearData}>
|
<Button color="red" onPress={clearData}>
|
||||||
{t("home.settings.plugins.jellyseerr.reset_jellyseerr_config_button")}
|
{t(
|
||||||
|
"home.settings.plugins.jellyseerr.reset_jellyseerr_config_button"
|
||||||
|
)}
|
||||||
</Button>
|
</Button>
|
||||||
</View>
|
</View>
|
||||||
</>
|
</>
|
||||||
@@ -128,14 +129,19 @@ export const JellyseerrSettings = () => {
|
|||||||
<Text className="text-xs text-red-600 mb-2">
|
<Text className="text-xs text-red-600 mb-2">
|
||||||
{t("home.settings.plugins.jellyseerr.jellyseerr_warning")}
|
{t("home.settings.plugins.jellyseerr.jellyseerr_warning")}
|
||||||
</Text>
|
</Text>
|
||||||
<Text className="font-bold mb-1">{t("home.settings.plugins.jellyseerr.server_url")}</Text>
|
<Text className="font-bold mb-1">
|
||||||
|
{t("home.settings.plugins.jellyseerr.server_url")}
|
||||||
|
</Text>
|
||||||
<View className="flex flex-col shrink mb-2">
|
<View className="flex flex-col shrink mb-2">
|
||||||
<Text className="text-xs text-gray-600">
|
<Text className="text-xs text-gray-600">
|
||||||
{t("home.settings.plugins.jellyseerr.server_url_hint")}
|
{t("home.settings.plugins.jellyseerr.server_url_hint")}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
<Input
|
<Input
|
||||||
placeholder={t("home.settings.plugins.jellyseerr.server_url_placeholder")}
|
className="border border-neutral-800 mb-2"
|
||||||
|
placeholder={t(
|
||||||
|
"home.settings.plugins.jellyseerr.server_url_placeholder"
|
||||||
|
)}
|
||||||
value={settings?.jellyseerrServerUrl ?? jellyseerrServerUrl}
|
value={settings?.jellyseerrServerUrl ?? jellyseerrServerUrl}
|
||||||
defaultValue={
|
defaultValue={
|
||||||
settings?.jellyseerrServerUrl ?? jellyseerrServerUrl
|
settings?.jellyseerrServerUrl ?? jellyseerrServerUrl
|
||||||
@@ -145,40 +151,20 @@ export const JellyseerrSettings = () => {
|
|||||||
autoCapitalize="none"
|
autoCapitalize="none"
|
||||||
textContentType="URL"
|
textContentType="URL"
|
||||||
onChangeText={setjellyseerrServerUrl}
|
onChangeText={setjellyseerrServerUrl}
|
||||||
editable={!testJellyseerrServerUrlMutation.isPending}
|
editable={!loginToJellyseerrMutation.isPending}
|
||||||
/>
|
/>
|
||||||
|
<View>
|
||||||
<Button
|
<Text className="font-bold mb-2">
|
||||||
loading={testJellyseerrServerUrlMutation.isPending}
|
{t("home.settings.plugins.jellyseerr.password")}
|
||||||
disabled={testJellyseerrServerUrlMutation.isPending}
|
</Text>
|
||||||
color={promptForJellyseerrPass ? "red" : "purple"}
|
|
||||||
className="h-12 mt-2"
|
|
||||||
onPress={() => {
|
|
||||||
if (promptForJellyseerrPass) {
|
|
||||||
clearData();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
testJellyseerrServerUrlMutation.mutate();
|
|
||||||
}}
|
|
||||||
style={{
|
|
||||||
marginBottom: 8,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{promptForJellyseerrPass ? t("home.settings.plugins.jellyseerr.clear_button") : t("home.settings.plugins.jellyseerr.save_button")}
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
<View
|
|
||||||
pointerEvents={promptForJellyseerrPass ? "auto" : "none"}
|
|
||||||
style={{
|
|
||||||
opacity: promptForJellyseerrPass ? 1 : 0.5,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Text className="font-bold mb-2">{t("home.settings.plugins.jellyseerr.password")}</Text>
|
|
||||||
<Input
|
<Input
|
||||||
|
className="border border-neutral-800"
|
||||||
autoFocus={true}
|
autoFocus={true}
|
||||||
focusable={true}
|
focusable={true}
|
||||||
placeholder={t("home.settings.plugins.jellyseerr.password_placeholder", {username: user?.Name})}
|
placeholder={t(
|
||||||
|
"home.settings.plugins.jellyseerr.password_placeholder",
|
||||||
|
{ username: user?.Name }
|
||||||
|
)}
|
||||||
value={jellyseerrPassword}
|
value={jellyseerrPassword}
|
||||||
keyboardType="default"
|
keyboardType="default"
|
||||||
secureTextEntry={true}
|
secureTextEntry={true}
|
||||||
@@ -186,10 +172,7 @@ export const JellyseerrSettings = () => {
|
|||||||
autoCapitalize="none"
|
autoCapitalize="none"
|
||||||
textContentType="password"
|
textContentType="password"
|
||||||
onChangeText={setJellyseerrPassword}
|
onChangeText={setJellyseerrPassword}
|
||||||
editable={
|
editable={!loginToJellyseerrMutation.isPending}
|
||||||
!loginToJellyseerrMutation.isPending &&
|
|
||||||
promptForJellyseerrPass
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
loading={loginToJellyseerrMutation.isPending}
|
loading={loginToJellyseerrMutation.isPending}
|
||||||
|
|||||||
Reference in New Issue
Block a user