import { load, Store } from '@tauri-apps/plugin-store'; import type { CookieSource } from '$lib/bindings/dependencies'; export type { CookieSource }; export interface CaptionSettings { fontFamily: string; fontSize: number; textColor: string; bold: boolean; outlineColor: string; backgroundEnabled: boolean; backgroundOpacity: number; backgroundColor: string; textOutline: boolean; shadowEnabled: boolean; shadowDepth: number; shadowColor: string; dimmedColorMode: 'auto' | 'custom'; dimmedOpacity: number; dimmedColor: string; position: 'bottom' | 'top'; wordHighlight: boolean; } export const DEFAULT_CAPTION_SETTINGS: CaptionSettings = { fontFamily: 'Arial', fontSize: 18, textColor: '#ffffff', bold: true, outlineColor: '#000000', backgroundEnabled: true, backgroundOpacity: 0.75, backgroundColor: '#000000', textOutline: true, shadowEnabled: false, shadowDepth: 2, shadowColor: '#000000', dimmedColorMode: 'auto', dimmedOpacity: 0.4, dimmedColor: '#999999', position: 'bottom', wordHighlight: true, }; export interface Preferences { outputDirectory: string; cookieSource: CookieSource; captionSettings: CaptionSettings; } const DEFAULT_PREFERENCES: Preferences = { outputDirectory: '~/', cookieSource: { type: 'browser', browser: 'firefox' }, captionSettings: { ...DEFAULT_CAPTION_SETTINGS }, }; let store: Store | null = null; let loadPromise: Promise | null = null; export const preferences = $state({ ...DEFAULT_PREFERENCES }); export async function loadPreferences(): Promise { if (loadPromise) { await loadPromise; return; } loadPromise = (async () => { store = await load('preferences.json', { autoSave: true }); const savedDir = await store.get('outputDirectory'); const savedCookie = await store.get('cookieSource'); const savedCaptions = await store.get('captionSettings'); if (savedDir) preferences.outputDirectory = savedDir; if (savedCookie) preferences.cookieSource = savedCookie; if (savedCaptions) preferences.captionSettings = { ...DEFAULT_CAPTION_SETTINGS, ...savedCaptions }; })(); await loadPromise; } export async function savePreferences(): Promise { if (!store) { await loadPreferences(); } if (!store) return; await store.set('outputDirectory', preferences.outputDirectory); await store.set('cookieSource', preferences.cookieSource); await store.set('captionSettings', preferences.captionSettings); await store.save(); } export async function setOutputDirectory(dir: string): Promise { preferences.outputDirectory = dir; await savePreferences(); } export async function setCookieSource(source: CookieSource): Promise { preferences.cookieSource = source; await savePreferences(); } export async function setCaptionSettings(settings: Partial): Promise { Object.assign(preferences.captionSettings, settings); await savePreferences(); }