mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-22 18:44:46 +08:00
feat: enhance login status management and improve error logging across services
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
import { create } from "zustand";
|
||||
import Cookies from "@react-native-cookies/cookies";
|
||||
import { api } from "@/services/api";
|
||||
import { useSettingsStore } from "./settingsStore";
|
||||
|
||||
interface AuthState {
|
||||
isLoggedIn: boolean;
|
||||
isLoginModalVisible: boolean;
|
||||
showLoginModal: () => void;
|
||||
hideLoginModal: () => void;
|
||||
checkLoginStatus: () => Promise<void>;
|
||||
checkLoginStatus: (apiBaseUrl?: string) => Promise<void>;
|
||||
logout: () => Promise<void>;
|
||||
}
|
||||
|
||||
@@ -17,27 +16,30 @@ const useAuthStore = create<AuthState>((set) => ({
|
||||
isLoginModalVisible: false,
|
||||
showLoginModal: () => set({ isLoginModalVisible: true }),
|
||||
hideLoginModal: () => set({ isLoginModalVisible: false }),
|
||||
checkLoginStatus: async () => {
|
||||
const { apiBaseUrl } = useSettingsStore.getState();
|
||||
checkLoginStatus: async (apiBaseUrl?: string) => {
|
||||
if (!apiBaseUrl) {
|
||||
set({ isLoggedIn: false, isLoginModalVisible: false });
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const { ok } = await api.login();
|
||||
if (ok) {
|
||||
set({ isLoggedIn: true });
|
||||
return;
|
||||
await api.login();
|
||||
set({ isLoginModalVisible: true });
|
||||
} catch {
|
||||
try {
|
||||
const cookies = await Cookies.get(api.baseURL);
|
||||
const isLoggedIn = cookies && !!cookies.auth;
|
||||
set({ isLoggedIn });
|
||||
if (!isLoggedIn) {
|
||||
set({ isLoginModalVisible: true });
|
||||
}
|
||||
} catch (error) {
|
||||
console.info("Failed to check login status:", error);
|
||||
if (error instanceof Error && error.message === "UNAUTHORIZED") {
|
||||
set({ isLoggedIn: false, isLoginModalVisible: true });
|
||||
} else {
|
||||
set({ isLoggedIn: false });
|
||||
}
|
||||
}
|
||||
const cookies = await Cookies.get(api.baseURL);
|
||||
const isLoggedIn = cookies && !!cookies.auth;
|
||||
set({ isLoggedIn });
|
||||
if (!isLoggedIn) {
|
||||
set({ isLoginModalVisible: true });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Failed to check login status:", error);
|
||||
set({ isLoggedIn: false, isLoginModalVisible: true });
|
||||
}
|
||||
},
|
||||
logout: async () => {
|
||||
@@ -45,7 +47,7 @@ const useAuthStore = create<AuthState>((set) => ({
|
||||
await Cookies.clearAll();
|
||||
set({ isLoggedIn: false, isLoginModalVisible: true });
|
||||
} catch (error) {
|
||||
console.error("Failed to logout:", error);
|
||||
console.info("Failed to logout:", error);
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -64,7 +64,7 @@ const useDetailStore = create<DetailState>((set, get) => ({
|
||||
}
|
||||
} catch (e) {
|
||||
if ((e as Error).name !== "AbortError") {
|
||||
console.error(`Failed to get resolution for ${searchResult.source_name}`, e);
|
||||
console.info(`Failed to get resolution for ${searchResult.source_name}`, e);
|
||||
}
|
||||
}
|
||||
return { ...searchResult, resolution };
|
||||
|
||||
@@ -2,6 +2,7 @@ import { create } from "zustand";
|
||||
import { api, SearchResult, PlayRecord } from "@/services/api";
|
||||
import { PlayRecordManager } from "@/services/storage";
|
||||
import useAuthStore from "./authStore";
|
||||
import { useSettingsStore } from "./settingsStore";
|
||||
|
||||
export type RowItem = (SearchResult | PlayRecord) & {
|
||||
id: string;
|
||||
@@ -80,6 +81,8 @@ const useHomeStore = create<HomeState>((set, get) => ({
|
||||
error: null,
|
||||
|
||||
fetchInitialData: async () => {
|
||||
const { apiBaseUrl } = useSettingsStore.getState();
|
||||
await useAuthStore.getState().checkLoginStatus(apiBaseUrl);
|
||||
set({ loading: true, contentData: [], pageStart: 0, hasMore: true, error: null });
|
||||
await get().loadMoreData();
|
||||
},
|
||||
@@ -163,6 +166,8 @@ const useHomeStore = create<HomeState>((set, get) => ({
|
||||
},
|
||||
|
||||
refreshPlayRecords: async () => {
|
||||
const { apiBaseUrl } = useSettingsStore.getState();
|
||||
await useAuthStore.getState().checkLoginStatus(apiBaseUrl);
|
||||
const { isLoggedIn } = useAuthStore.getState();
|
||||
if (!isLoggedIn) {
|
||||
set((state) => {
|
||||
@@ -194,9 +199,7 @@ const useHomeStore = create<HomeState>((set, get) => ({
|
||||
}
|
||||
return {};
|
||||
});
|
||||
if (get().selectedCategory.type === "record") {
|
||||
get().fetchInitialData();
|
||||
}
|
||||
get().fetchInitialData();
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ const usePlayerStore = create<PlayerState>((set, get) => ({
|
||||
outroStartTime: playRecord?.outroStartTime,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Failed to load play record", error);
|
||||
console.info("Failed to load play record", error);
|
||||
set({ isLoading: false });
|
||||
}
|
||||
},
|
||||
@@ -217,7 +217,7 @@ const usePlayerStore = create<PlayerState>((set, get) => ({
|
||||
handlePlaybackStatusUpdate: (newStatus) => {
|
||||
if (!newStatus.isLoaded) {
|
||||
if (newStatus.error) {
|
||||
console.error(`Playback Error: ${newStatus.error}`);
|
||||
console.info(`Playback Error: ${newStatus.error}`);
|
||||
}
|
||||
set({ status: newStatus });
|
||||
return;
|
||||
|
||||
@@ -41,7 +41,7 @@ export const useRemoteControlStore = create<RemoteControlState>((set, get) => ({
|
||||
set({ isServerRunning: true, serverUrl: url, error: null });
|
||||
} catch {
|
||||
const errorMessage = '启动失败,请强制退应用后重试。';
|
||||
console.error('[RemoteControlStore] Failed to start server:', errorMessage);
|
||||
console.info('[RemoteControlStore] Failed to start server:', errorMessage);
|
||||
set({ error: errorMessage });
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { create } from 'zustand';
|
||||
import { SettingsManager } from '@/services/storage';
|
||||
import { api, ServerConfig } from '@/services/api';
|
||||
import useHomeStore from './homeStore';
|
||||
import useAuthStore from './authStore';
|
||||
// import useHomeStore from './homeStore';
|
||||
|
||||
|
||||
interface SettingsState {
|
||||
@@ -58,7 +57,7 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
|
||||
const config = await api.getServerConfig();
|
||||
set({ serverConfig: config });
|
||||
} catch (error) {
|
||||
console.error("Failed to fetch server config:", error);
|
||||
console.info("Failed to fetch server config:", error);
|
||||
}
|
||||
},
|
||||
setApiBaseUrl: (url) => set({ apiBaseUrl: url }),
|
||||
@@ -75,8 +74,7 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
|
||||
});
|
||||
api.setBaseUrl(apiBaseUrl);
|
||||
set({ isModalVisible: false });
|
||||
useHomeStore.getState().fetchInitialData();
|
||||
useAuthStore.getState().checkLoginStatus();
|
||||
// useHomeStore.getState().fetchInitialData();
|
||||
},
|
||||
showModal: () => set({ isModalVisible: true }),
|
||||
hideModal: () => set({ isModalVisible: false }),
|
||||
|
||||
Reference in New Issue
Block a user