bdcf4fe299
- Move main process to electron/main/ - Move preload to electron/preload/ - Add shared types in electron/shared/ - Split redis-service into modular redis/ directory - Flatten renderer to src/ (remove src/renderer/ nesting) - Update electron.vite.config.ts paths - Update tsconfig paths - Output to electron-dist/
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
// src/renderer/src/stores/app.ts
|
|
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
|
|
export type ThemeMode = 'system' | 'dark' | 'light'
|
|
|
|
export const useAppStore = defineStore('app', () => {
|
|
const theme = ref<ThemeMode>((localStorage.getItem('theme') as ThemeMode) || 'system')
|
|
const isDark = ref(true)
|
|
const fontSize = ref<number>(Number(localStorage.getItem('fontSize')) || 13)
|
|
const scanCount = ref<number>(Number(localStorage.getItem('scanCount')) || 100)
|
|
|
|
function applyTheme(mode: ThemeMode, osDark?: boolean) {
|
|
theme.value = mode
|
|
const dark = mode === 'system' ? (osDark ?? true) : mode === 'dark'
|
|
isDark.value = dark
|
|
document.documentElement.classList.toggle('light', !dark)
|
|
}
|
|
|
|
if (window.electronAPI) {
|
|
window.electronAPI.theme.onOsUpdated((osDark: boolean) => {
|
|
if (theme.value === 'system') {
|
|
applyTheme('system', osDark)
|
|
}
|
|
})
|
|
}
|
|
|
|
window.electronAPI?.theme.get().then((osDark: boolean) => {
|
|
applyTheme(theme.value, osDark)
|
|
})
|
|
|
|
function setTheme(mode: ThemeMode) {
|
|
applyTheme(mode)
|
|
localStorage.setItem('theme', mode)
|
|
window.electronAPI?.theme.set(mode)
|
|
}
|
|
|
|
function setFontSize(size: number) {
|
|
fontSize.value = size
|
|
localStorage.setItem('fontSize', String(size))
|
|
}
|
|
|
|
function setScanCount(count: number) {
|
|
scanCount.value = count
|
|
localStorage.setItem('scanCount', String(count))
|
|
}
|
|
|
|
return { theme, isDark, fontSize, scanCount, setTheme, setFontSize, setScanCount }
|
|
})
|