From 415f00573e7a0e69a5dbef45f448d5fafe549114 Mon Sep 17 00:00:00 2001 From: pobb <79351885+1506086927@users.noreply.github.com> Date: Fri, 15 May 2026 19:06:18 +0800 Subject: [PATCH] Update settingsStore.ts --- desktop/src/stores/settingsStore.ts | 42 ++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/desktop/src/stores/settingsStore.ts b/desktop/src/stores/settingsStore.ts index afdd4a9d..0a82e445 100644 --- a/desktop/src/stores/settingsStore.ts +++ b/desktop/src/stores/settingsStore.ts @@ -3,7 +3,8 @@ import { ApiError } from '../api/client' import { settingsApi } from '../api/settings' import { modelsApi } from '../api/models' import { h5AccessApi } from '../api/h5Access' -import { isThemeMode, type H5AccessSettings, type PermissionMode, type EffortLevel, type ModelInfo, type ThemeMode, type WebSearchSettings } from '../types/settings' +import { isThemeMode, type H5AccessSettings, type PermissionMode, type EffortLevel, type ModelInfo, type ThemeMode, type WebSearchSettings, type AppMode, type AppModeConfig } from '../types/settings' +import { isTauriRuntime } from '../lib/desktopRuntime' import type { Locale } from '../i18n' import { useUIStore } from './uiStore' @@ -36,6 +37,9 @@ type SettingsStore = { isLoading: boolean error: string | null + appMode: AppModeConfig + appModeRequiresRestart: boolean + fetchAll: () => Promise fetchH5Access: () => Promise setPermissionMode: (mode: PermissionMode) => Promise @@ -55,6 +59,8 @@ type SettingsStore = { publicBaseUrl?: string | null }) => Promise setResponseLanguage: (language: string) => Promise + fetchAppMode: () => Promise + setAppMode: (mode: AppMode, portableDir?: string | null) => Promise } const DEFAULT_H5_ACCESS_SETTINGS: H5AccessSettings = { @@ -82,6 +88,9 @@ export const useSettingsStore = create((set, get) => ({ isLoading: false, error: null, + appMode: { mode: 'default', portableDir: null, defaultPortableDir: null }, + appModeRequiresRestart: false, + fetchAll: async () => { set({ isLoading: true, error: null }) try { @@ -288,6 +297,37 @@ export const useSettingsStore = create((set, get) => ({ set({ responseLanguage: prev }) } }, + + fetchAppMode: async () => { + if (!isTauriRuntime()) return + try { + const { invoke } = await import('@tauri-apps/api/core') + const result: AppModeConfig = await invoke('get_app_mode') + set({ appMode: result }) + } catch { /* silently ignore - not in Tauri or command unavailable */ } + }, + + setAppMode: async (mode, portableDir) => { + if (!isTauriRuntime()) return + const prev = get().appMode + const newMode: AppModeConfig = { + ...prev, + mode, + portableDir: mode === 'portable' + ? portableDir ?? prev.defaultPortableDir ?? prev.portableDir + : null, + } + set({ appMode: newMode, appModeRequiresRestart: true }) + try { + const { invoke } = await import('@tauri-apps/api/core') + await invoke('set_app_mode', { + mode, + portableDir: newMode.portableDir || null, + }) + } catch { + set({ appMode: prev, appModeRequiresRestart: false }) + } + }, })) function normalizeWebSearchSettings(settings: WebSearchSettings | undefined): WebSearchSettings {