import { store } from "@tauri-store/valtio" import { useSnapshot } from "valtio" import { DEFAULT_STORE_CONFIG } from "./config" import { enable, disable } from "@tauri-apps/plugin-autostart" import { LazyStore } from '@tauri-apps/plugin-store'; const defaultValue = { version: "0.0.1", hasUpdate: false, latestVersion: "", // 最新版本号 inited: false, notice: "", useMirror: true, // 默认使用镜像源(CDN 加速) includePrerelease: false, // 默认不包含预发布版本 autoStart: false, startHidden: false, hiddenOnClose: false, steamUsersViewMode: "list-large" as "card" | "list" | "list-large", } export const appStore = store("app", { ...defaultValue }, DEFAULT_STORE_CONFIG) export const useAppStore = () => { void appStore.start const state = useSnapshot(appStore.state) return { state, store: appStore, setVersion, setHasUpdate, setLatestVersion, setInited, setNotice, setUseMirror, setIncludePrerelease, setAutoStart, setStartHidden, setHiddenOnClose, setSteamUsersViewMode, resetAppStore, } } const launchStore = new LazyStore('cstb.json', { autoSave: true, defaults: defaultValue }); if (typeof window !== 'undefined') void launchStore.save() const setVersion = (version: string) => { appStore.state.version = version } const setHasUpdate = (hasUpdate: boolean) => { appStore.state.hasUpdate = hasUpdate } const setLatestVersion = (latestVersion: string) => { appStore.state.latestVersion = latestVersion } const setInited = (inited: boolean) => { appStore.state.inited = inited } const setNotice = (notice: string) => { appStore.state.notice = notice } const setUseMirror = (useMirror: boolean) => { appStore.state.useMirror = useMirror } const setIncludePrerelease = (includePrerelease: boolean) => { appStore.state.includePrerelease = includePrerelease } const setAutoStart = (autoStart: boolean) => { if (autoStart) { void enable() } else { void disable() } appStore.state.autoStart = autoStart } // 同步到 launchStore 使 start hidden 生效 const setStartHidden = async (startHidden: boolean) => { appStore.state.startHidden = startHidden; await launchStore.set('hidden', startHidden); await launchStore.save(); } const setHiddenOnClose = (hiddenOnClose: boolean) => { appStore.state.hiddenOnClose = hiddenOnClose; } const setSteamUsersViewMode = (viewMode: "card" | "list" | "list-large") => { appStore.state.steamUsersViewMode = viewMode } const resetAppStore = () => { setVersion(defaultValue.version) setHasUpdate(defaultValue.hasUpdate) setLatestVersion(defaultValue.latestVersion) setInited(defaultValue.inited) setNotice(defaultValue.notice) setUseMirror(defaultValue.useMirror) setIncludePrerelease(defaultValue.includePrerelease) setAutoStart(defaultValue.autoStart) void setStartHidden(defaultValue.startHidden) setHiddenOnClose(defaultValue.hiddenOnClose) setSteamUsersViewMode(defaultValue.steamUsersViewMode) }