Feat: Update Suwayomi (Stable -> Preview) + UI Login

This commit is contained in:
Youwes09
2026-04-30 22:02:45 -05:00
parent daaeae00fe
commit c8ec6d6b90
14 changed files with 357 additions and 190 deletions
+68 -51
View File
@@ -1,20 +1,21 @@
import { store } from "@store/state.svelte";
import { probeServer, loginBasic } from "@core/auth";
import { trackingState } from "@features/tracking/store/trackingState.svelte";
import { loadAllStores } from "@core/persistence/persist";
import { store } from "@store/state.svelte";
import { probeServer, loginBasic, loginUI } from "@core/auth";
import { trackingState } from "@features/tracking/store/trackingState.svelte";
import { loadAllStores } from "@core/persistence/persist";
const MAX_ATTEMPTS = 40;
export const boot = $state({
serverProbeOk: false,
failed: false,
notConfigured: false,
loginRequired: false,
unsupportedMode: false,
loginUser: "",
loginPass: "",
loginError: null as string | null,
loginBusy: false,
serverProbeOk: false,
failed: false,
notConfigured: false,
loginRequired: false,
loginError: null as string | null,
loginBusy: false,
loginUser: "",
loginPass: "",
sessionExpired: false,
skipped: false,
});
let probeGeneration = 0;
@@ -26,50 +27,56 @@ export async function initStore() {
export function startProbe() {
const gen = ++probeGeneration;
boot.failed = false;
boot.loginRequired = false;
boot.unsupportedMode = false;
let tries = 0;
boot.failed = false;
boot.loginRequired = false;
boot.skipped = false;
let tries = 0;
async function probe() {
if (gen !== probeGeneration) return;
tries++;
const result = await probeServer();
if (gen !== probeGeneration) return;
if (result === "ok") {
boot.serverProbeOk = true;
boot.loginRequired = false;
trackingState.bootSync().catch(() => {});
return;
}
if (result === "auth_required") {
boot.serverProbeOk = true;
const savedUser = store.settings.serverAuthUser?.trim() ?? "";
const savedPass = store.settings.serverAuthPass?.trim() ?? "";
if (savedUser && savedPass) {
try {
await loginBasic(savedUser, savedPass);
boot.loginRequired = false;
trackingState.bootSync().catch(() => {});
return;
} catch {}
}
boot.loginRequired = true;
boot.loginUser = store.settings.serverAuthUser ?? "";
return;
}
const mode = store.settings.serverAuthMode ?? "NONE";
if (result === "unsupported_mode") {
boot.serverProbeOk = true;
boot.unsupportedMode = true;
if (mode === "BASIC_AUTH") {
const user = store.settings.serverAuthUser?.trim() ?? "";
const pass = store.settings.serverAuthPass?.trim() ?? "";
if (user && pass) {
try {
await loginBasic(user, pass);
if (gen !== probeGeneration) return;
trackingState.bootSync().catch(() => {});
return;
} catch {}
}
boot.loginUser = store.settings.serverAuthUser ?? "";
boot.loginRequired = true;
return;
}
if (mode === "UI_LOGIN") {
boot.loginUser = store.settings.serverAuthUser ?? "";
boot.loginRequired = true;
return;
}
trackingState.bootSync().catch(() => {});
return;
}
if (tries >= MAX_ATTEMPTS) { boot.failed = true; return; }
const delay = Math.min(750 + tries * 250, 3000);
setTimeout(probe, delay);
setTimeout(probe, Math.min(750 + tries * 250, 3000));
}
setTimeout(probe, 2000);
@@ -79,18 +86,27 @@ export function stopProbe() {
probeGeneration++;
}
export async function submitLogin(onSuccess: () => void) {
export async function submitLogin(onSuccess: () => void): Promise<void> {
if (!boot.loginUser.trim() || !boot.loginPass.trim()) {
boot.loginError = "Username and password are required";
return;
}
boot.loginBusy = true;
boot.loginError = null;
try {
await loginBasic(boot.loginUser.trim(), boot.loginPass.trim());
boot.loginRequired = false;
boot.loginPass = "";
boot.loginError = null;
const mode = store.settings.serverAuthMode ?? "NONE";
if (mode === "UI_LOGIN") {
await loginUI(boot.loginUser.trim(), boot.loginPass.trim());
} else {
await loginBasic(boot.loginUser.trim(), boot.loginPass.trim());
}
boot.loginRequired = false;
boot.sessionExpired = false;
boot.skipped = false;
boot.loginPass = "";
boot.loginError = null;
trackingState.bootSync().catch(() => {});
onSuccess();
} catch (e: any) {
@@ -101,18 +117,19 @@ export async function submitLogin(onSuccess: () => void) {
}
export function retryBoot() {
boot.serverProbeOk = false;
boot.failed = false;
boot.notConfigured = false;
boot.loginRequired = false;
boot.unsupportedMode = false;
boot.serverProbeOk = false;
boot.failed = false;
boot.notConfigured = false;
boot.loginRequired = false;
boot.skipped = false;
startProbe();
}
export function bypassBoot(onReady: () => void) {
probeGeneration++;
boot.serverProbeOk = true;
boot.loginRequired = false;
boot.unsupportedMode = false;
boot.serverProbeOk = true;
boot.loginRequired = false;
boot.sessionExpired = false;
boot.skipped = true;
onReady();
}
}