feat: enhance configuration fetching and implement retry logic for API requests

This commit is contained in:
Linus Rath
2026-03-15 00:21:59 +01:00
parent caed067cda
commit 8c5e3ee240
2 changed files with 30 additions and 17 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ interface AppConfig extends ConfigData {
let configCache: ConfigData | null = null;
let configPromise: Promise<ConfigData> | null = null;
async function fetchConfig(): Promise<ConfigData> {
export async function fetchConfig(): Promise<ConfigData> {
// Return cached config if available
if (configCache) {
return configCache;
+29 -16
View File
@@ -8,6 +8,7 @@ import { useVacationStore } from './vacation-store';
import { useCalendarStore } from './calendar-store';
import { useFilterStore } from './filter-store';
import { useSettingsStore } from './settings-store';
import { fetchConfig } from '@/hooks/use-config';
import { debug } from '@/lib/debug';
import type { Identity } from '@/lib/jmap/types';
@@ -163,10 +164,13 @@ export const useAuthStore = create<AuthState>()(
error: null,
});
// Sync settings from server
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
useSettingsStore.getState().enableSync(username, serverUrl);
});
// Sync settings from server (only if enabled)
fetchConfig().then(config => {
if (!config.settingsSyncEnabled) return;
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
useSettingsStore.getState().enableSync(username, serverUrl);
});
}).catch(() => {});
if (rememberMe) {
try {
@@ -242,10 +246,13 @@ export const useAuthStore = create<AuthState>()(
scheduleRefresh(expires_in, get().refreshAccessToken);
// Sync settings from server
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
useSettingsStore.getState().enableSync(username, serverUrl);
});
// Sync settings from server (only if enabled)
fetchConfig().then(config => {
if (!config.settingsSyncEnabled) return;
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
useSettingsStore.getState().enableSync(username, serverUrl);
});
}).catch(() => {});
return true;
} catch (error) {
@@ -393,10 +400,13 @@ export const useAuthStore = create<AuthState>()(
accessToken: token,
});
// Sync settings from server
useSettingsStore.getState().loadFromServer(state.username || '', state.serverUrl).finally(() => {
useSettingsStore.getState().enableSync(state.username || '', state.serverUrl!);
});
// Sync settings from server (only if enabled)
fetchConfig().then(config => {
if (!config.settingsSyncEnabled) return;
useSettingsStore.getState().loadFromServer(state.username || '', state.serverUrl!).finally(() => {
useSettingsStore.getState().enableSync(state.username || '', state.serverUrl!);
});
}).catch(() => {});
return;
}
} catch (error) {
@@ -436,10 +446,13 @@ export const useAuthStore = create<AuthState>()(
authMode: 'basic',
});
// Sync settings from server
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
useSettingsStore.getState().enableSync(username, serverUrl);
});
// Sync settings from server (only if enabled)
fetchConfig().then(config => {
if (!config.settingsSyncEnabled) return;
useSettingsStore.getState().loadFromServer(username, serverUrl).finally(() => {
useSettingsStore.getState().enableSync(username, serverUrl);
});
}).catch(() => {});
return;
}
} catch (error) {