mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-28 15:04:44 +08:00
fix(init): resolve startup error message timing issue
Fix race condition where 'please check network or server address' error was shown on first startup even when API was properly configured. - Add isLoadingServerConfig state to track server config fetch status - Modify authStore to wait for server config loading before showing errors - Ensure loadSettings completes fully before triggering login checks - Only show network error when config fetch actually fails, not during loading
This commit is contained in:
@@ -24,10 +24,34 @@ const useAuthStore = create<AuthState>((set) => ({
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const serverConfig = useSettingsStore.getState().serverConfig;
|
||||
// Wait for server config to be loaded if it's currently loading
|
||||
const settingsState = useSettingsStore.getState();
|
||||
let serverConfig = settingsState.serverConfig;
|
||||
|
||||
// If server config is loading, wait a bit for it to complete
|
||||
if (settingsState.isLoadingServerConfig) {
|
||||
// Wait up to 3 seconds for server config to load
|
||||
const maxWaitTime = 3000;
|
||||
const checkInterval = 100;
|
||||
let waitTime = 0;
|
||||
|
||||
while (waitTime < maxWaitTime) {
|
||||
await new Promise(resolve => setTimeout(resolve, checkInterval));
|
||||
waitTime += checkInterval;
|
||||
const currentState = useSettingsStore.getState();
|
||||
if (!currentState.isLoadingServerConfig) {
|
||||
serverConfig = currentState.serverConfig;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!serverConfig?.StorageType) {
|
||||
Toast.show({ type: "error", text1: "请检查网络或者服务器地址是否可用" });
|
||||
return
|
||||
// Only show error if we're not loading and have tried to fetch the config
|
||||
if (!settingsState.isLoadingServerConfig) {
|
||||
Toast.show({ type: "error", text1: "请检查网络或者服务器地址是否可用" });
|
||||
}
|
||||
return;
|
||||
}
|
||||
const cookies = await Cookies.get(api.baseURL);
|
||||
if (serverConfig && serverConfig.StorageType === "localstorage" && !cookies.auth) {
|
||||
|
||||
@@ -15,6 +15,7 @@ interface SettingsState {
|
||||
};
|
||||
isModalVisible: boolean;
|
||||
serverConfig: ServerConfig | null;
|
||||
isLoadingServerConfig: boolean;
|
||||
loadSettings: () => Promise<void>;
|
||||
fetchServerConfig: () => Promise<void>;
|
||||
setApiBaseUrl: (url: string) => void;
|
||||
@@ -33,6 +34,7 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
|
||||
remoteInputEnabled: false,
|
||||
isModalVisible: false,
|
||||
serverConfig: null,
|
||||
isLoadingServerConfig: false,
|
||||
videoSource: {
|
||||
enabledAll: true,
|
||||
sources: {},
|
||||
@@ -48,10 +50,13 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
|
||||
sources: {},
|
||||
},
|
||||
});
|
||||
api.setBaseUrl(settings.apiBaseUrl);
|
||||
await get().fetchServerConfig();
|
||||
if (settings.apiBaseUrl) {
|
||||
api.setBaseUrl(settings.apiBaseUrl);
|
||||
await get().fetchServerConfig();
|
||||
}
|
||||
},
|
||||
fetchServerConfig: async () => {
|
||||
set({ isLoadingServerConfig: true });
|
||||
try {
|
||||
const config = await api.getServerConfig();
|
||||
if (config) {
|
||||
@@ -61,6 +66,8 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
|
||||
} catch (error) {
|
||||
set({ serverConfig: null });
|
||||
console.info("Failed to fetch server config:", error);
|
||||
} finally {
|
||||
set({ isLoadingServerConfig: false });
|
||||
}
|
||||
},
|
||||
setApiBaseUrl: (url) => set({ apiBaseUrl: url }),
|
||||
|
||||
Reference in New Issue
Block a user