74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
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,
|
|
}
|
|
}) |