Files
cstb-next/src/store/app.ts

87 lines
2.1 KiB
TypeScript
Raw Normal View History

import { store } from "@tauri-store/valtio"
2025-03-17 11:48:30 +08:00
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,
inited: false,
notice: "",
2025-03-12 22:20:06 +08:00
useMirror: true,
2025-03-23 23:55:15 +08:00
autoStart: false,
startHidden: false,
hiddenOnClose: false,
2024-11-11 17:17:08 +08:00
}
2025-03-12 22:20:06 +08:00
export const appStore = store("app", { ...defaultValue }, DEFAULT_STORE_CONFIG)
2025-03-17 11:48:30 +08:00
export const useAppStore = () => {
void appStore.start
const state = useSnapshot(appStore.state)
return {
state,
store: appStore,
2025-03-17 11:48:30 +08:00
setVersion,
setHasUpdate,
setInited,
setNotice,
setUseMirror,
2025-03-23 23:55:15 +08:00
setAutoStart,
setStartHidden,
setHiddenOnClose,
2025-03-17 11:48:30 +08:00
resetAppStore,
}
}
const launchStore = new LazyStore('cstb.json', { autoSave: true });
if (typeof window !== 'undefined') void launchStore.save()
2025-03-17 11:48:30 +08:00
const setVersion = (version: string) => {
2025-03-12 22:20:06 +08:00
appStore.state.version = version
}
2025-03-17 11:48:30 +08:00
const setHasUpdate = (hasUpdate: boolean) => {
2025-03-12 22:20:06 +08:00
appStore.state.hasUpdate = hasUpdate
}
2025-03-17 11:48:30 +08:00
const setInited = (inited: boolean) => {
2025-03-12 22:20:06 +08:00
appStore.state.inited = inited
}
2025-03-17 11:48:30 +08:00
const setNotice = (notice: string) => {
2025-03-12 22:20:06 +08:00
appStore.state.notice = notice
}
2025-03-17 11:48:30 +08:00
const setUseMirror = (useMirror: boolean) => {
2025-03-12 22:20:06 +08:00
appStore.state.useMirror = useMirror
}
2025-03-23 23:55:15 +08:00
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;
}
2025-03-17 11:48:30 +08:00
const resetAppStore = () => {
setVersion(defaultValue.version)
setHasUpdate(defaultValue.hasUpdate)
setInited(defaultValue.inited)
setNotice(defaultValue.notice)
setUseMirror(defaultValue.useMirror)
2025-03-23 23:55:15 +08:00
setAutoStart(defaultValue.autoStart)
void setStartHidden(defaultValue.startHidden)
setHiddenOnClose(defaultValue.hiddenOnClose)
2025-03-17 11:48:30 +08:00
}