import { computed } from 'vue' import { defineStore } from 'pinia' import { useUserStore } from '@KTXC' const MESSAGE_READ_ENABLED_KEY = 'mail.behaviour.messageReadEnabled' const MESSAGE_READ_DELAY_KEY = 'mail.behaviour.messageReadDelay' const FOLDER_VIEW_MODE_KEY = 'mail.folderViewMode' const DEFAULT_MESSAGE_READ_ENABLED = false const DEFAULT_MESSAGE_READ_DELAY = 5 const DEFAULT_FOLDER_VIEW_MODE = 'tree' export type FolderViewMode = 'tree' | 'page' export const messageReadDelayOptions = [ { value: 2, title: '2 seconds' }, { value: 5, title: '5 seconds' }, { value: 10, title: '10 seconds' }, { value: 30, title: '30 seconds' }, ] export const folderViewModeOptions = [ { value: 'tree', title: 'Tree' }, { value: 'page', title: 'Page' }, ] function normalizeBoolean(value: unknown, fallback: boolean): boolean { if (typeof value === 'boolean') { return value } return fallback } function normalizePositiveNumber(value: unknown, fallback: number): number { const normalized = Number(value) return Number.isFinite(normalized) && normalized > 0 ? normalized : fallback } function normalizeFolderViewMode(value: unknown, fallback: FolderViewMode): FolderViewMode { return value === 'tree' || value === 'page' ? value : fallback } export const useMailSettingsStore = defineStore('mailSettingsStore', () => { const userStore = useUserStore() const messageReadEnabled = computed({ get: () => normalizeBoolean(userStore.getSetting(MESSAGE_READ_ENABLED_KEY), DEFAULT_MESSAGE_READ_ENABLED), set: (value: boolean) => userStore.setSetting(MESSAGE_READ_ENABLED_KEY, value), }) const messageReadDelay = computed({ get: () => normalizePositiveNumber(userStore.getSetting(MESSAGE_READ_DELAY_KEY), DEFAULT_MESSAGE_READ_DELAY), set: (value: number) => userStore.setSetting( MESSAGE_READ_DELAY_KEY, normalizePositiveNumber(value, DEFAULT_MESSAGE_READ_DELAY), ), }) const folderViewMode = computed({ get: () => normalizeFolderViewMode(userStore.getSetting(FOLDER_VIEW_MODE_KEY), DEFAULT_FOLDER_VIEW_MODE), set: (value: FolderViewMode) => userStore.setSetting( FOLDER_VIEW_MODE_KEY, normalizeFolderViewMode(value, DEFAULT_FOLDER_VIEW_MODE), ), }) return { folderViewMode, messageReadEnabled, messageReadDelay, } })