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

106 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}