From f74eb170397e845d27faee00855b14412ecfb383 Mon Sep 17 00:00:00 2001 From: cottongin Date: Mon, 21 Sep 2026 10:54:42 -0400 Subject: [PATCH] feat: add preferences store with cookie source and output directory Co-authored-by: Cursor --- src/App.svelte | 17 ++ src/lib/components/PreferencesPanel.svelte | 203 +++++++++++++++++++++ src/lib/stores/preferences.svelte.ts | 43 +++++ 3 files changed, 263 insertions(+) create mode 100644 src/lib/components/PreferencesPanel.svelte create mode 100644 src/lib/stores/preferences.svelte.ts diff --git a/src/App.svelte b/src/App.svelte index 655abc3..74f0a39 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -6,17 +6,29 @@ import ClipList from '$lib/components/ClipList.svelte'; import StatusBar from '$lib/components/StatusBar.svelte'; import SetupWizard from '$lib/components/SetupWizard.svelte'; + import PreferencesPanel from '$lib/components/PreferencesPanel.svelte'; + import { loadPreferences } from '$lib/stores/preferences.svelte'; let showSetupWizard = $state(true); + let showPreferences = $state(false); + + $effect(() => { + loadPreferences(); + }); {#if showSetupWizard} (showSetupWizard = false)} /> {/if} +{#if showPreferences} + (showPreferences = false)} /> +{/if} +
+
@@ -51,4 +63,9 @@ flex-direction: column; overflow: hidden; } + + .prefs-btn { + font-size: 18px; + padding: 4px 8px; + } diff --git a/src/lib/components/PreferencesPanel.svelte b/src/lib/components/PreferencesPanel.svelte new file mode 100644 index 0000000..1f3901b --- /dev/null +++ b/src/lib/components/PreferencesPanel.svelte @@ -0,0 +1,203 @@ + + + + + diff --git a/src/lib/stores/preferences.svelte.ts b/src/lib/stores/preferences.svelte.ts new file mode 100644 index 0000000..05dd871 --- /dev/null +++ b/src/lib/stores/preferences.svelte.ts @@ -0,0 +1,43 @@ +import { load, Store } from '@tauri-apps/plugin-store'; +import type { CookieSource } from '$lib/bindings/dependencies'; + +export type { CookieSource }; + +export interface Preferences { + outputDirectory: string; + cookieSource: CookieSource; +} + +const DEFAULT_PREFERENCES: Preferences = { + outputDirectory: '~/', + cookieSource: { type: 'browser', browser: 'firefox' }, +}; + +let store: Store | null = null; + +export const preferences = $state({ ...DEFAULT_PREFERENCES }); + +export async function loadPreferences(): Promise { + store = await load('preferences.json', { autoSave: true }); + const savedDir = await store.get('outputDirectory'); + const savedCookie = await store.get('cookieSource'); + if (savedDir) preferences.outputDirectory = savedDir; + if (savedCookie) preferences.cookieSource = savedCookie; +} + +export async function savePreferences(): Promise { + if (!store) return; + await store.set('outputDirectory', preferences.outputDirectory); + await store.set('cookieSource', preferences.cookieSource); + 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(); +}