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

128 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-11-11 10:04:00 +08:00
import type { SteamUser } from "@/types/steam"
import { store } from "@tauri-store/valtio"
import { DEFAULT_STORE_CONFIG } from "./config"
2025-03-17 11:48:30 +08:00
import { useSnapshot } from "valtio"
import { invoke } from "@tauri-apps/api/core"
import path from "path"
const defaultValue = {
steamDir: "C:\\Program Files (x86)\\Steam",
cs2Dir: "",
2025-03-21 02:52:09 +08:00
steamDirValid: false,
cs2DirValid: false,
steamDirChecking: false,
cs2DirChecking: false,
users: [] as SteamUser[],
}
2025-03-17 11:48:30 +08:00
2025-03-12 22:20:06 +08:00
export const steamStore = store(
"steam",
{ ...defaultValue },
DEFAULT_STORE_CONFIG,
)
2025-03-17 11:48:30 +08:00
export const useSteamStore = () => {
void steamStore.start
const state = useSnapshot(steamStore.state)
return {
state,
store: steamStore,
cs2BaseDir,
2025-03-17 11:48:30 +08:00
setDir,
setCsDir,
setUsers,
setSteamDirValid,
setCs2DirValid,
checkSteamDirValid,
checkCs2DirValid,
2025-03-17 11:48:30 +08:00
currentUser,
getUsers,
selectUser,
switchLoginUser,
2025-03-17 11:48:30 +08:00
resetSteamStore,
}
}
const cs2BaseDir = () => {
return path.normalize(`${steamStore.state.cs2Dir.replaceAll("\\", "/")}/../../..`)
}
2025-03-17 11:48:30 +08:00
const setDir = (dir: string) => {
steamStore.state.steamDir = dir
2025-03-12 22:20:06 +08:00
}
2025-03-17 11:48:30 +08:00
const setCsDir = (dir: string) => {
steamStore.state.cs2Dir = dir
2025-03-12 22:20:06 +08:00
}
2025-03-17 11:48:30 +08:00
const setUsers = (users: SteamUser[]) => {
2025-03-12 22:20:06 +08:00
steamStore.state.users = users
}
const setSteamDirValid = (valid: boolean) => {
steamStore.state.steamDirValid = valid
2025-03-12 22:20:06 +08:00
}
const setCs2DirValid = (valid: boolean) => {
steamStore.state.cs2DirValid = valid
}
const setSteamDirChecking = (checking: boolean) => {
2025-03-21 02:52:09 +08:00
steamStore.state.steamDirChecking = checking
}
const setCs2DirChecking = (checking: boolean) => {
2025-03-21 02:52:09 +08:00
steamStore.state.cs2DirChecking = checking
}
const checkSteamDirValid = async () => {
setSteamDirChecking(true)
const pathExist = await invoke<boolean>("check_path", { path: steamStore.state.steamDir })
setSteamDirValid(pathExist)
2025-03-21 02:52:09 +08:00
setTimeout(() => {
setSteamDirChecking(false)
2025-03-21 02:52:09 +08:00
}, 500)
}
const checkCs2DirValid = async () => {
setCs2DirChecking(true)
const pathExist = await invoke<boolean>("check_path", { path: steamStore.state.cs2Dir })
setCs2DirValid(pathExist)
2025-03-21 02:52:09 +08:00
setTimeout(() => {
setCs2DirChecking(false)
2025-03-21 02:52:09 +08:00
}, 500)
2025-03-12 22:20:06 +08:00
}
2025-03-17 11:48:30 +08:00
const currentUser = () => {
return steamStore.state.users.at(0) || undefined
}
const getUsers = async () => {
const users = await invoke<SteamUser[]>("get_steam_users", { steamDir: steamStore.state.steamDir })
setUsers(users)
}
2025-03-23 22:52:39 +08:00
const selectUser = (index: number) => {
const user = steamStore.state.users.at(index)
if (user) {
setUsers([
user,
...steamStore.state.users.slice(0, index),
...steamStore.state.users.slice(index + 1),
])
}
}
const switchLoginUser = async (index: number) => {
const user = steamStore.state.users.at(index)
if (user) {
await invoke<SteamUser[]>("set_auto_login_user", { user: user.account_name })
}
}
2025-03-17 11:48:30 +08:00
const resetSteamStore = () => {
setDir(defaultValue.steamDir)
setCsDir(defaultValue.cs2Dir)
setUsers(defaultValue.users)
setSteamDirValid(defaultValue.steamDirValid)
setCs2DirValid(defaultValue.cs2DirValid)
setSteamDirChecking(defaultValue.steamDirChecking)
setCs2DirChecking(defaultValue.cs2DirChecking)
}