diff --git a/src/lib/audio/episode-data.ts b/src/lib/audio/episode-data.ts index 99c50fd..1f932b5 100644 --- a/src/lib/audio/episode-data.ts +++ b/src/lib/audio/episode-data.ts @@ -1,6 +1,6 @@ import { audio_element, type AudioElementStore } from '$lib/audio/audio-element'; import { episode_details, type EpisodeDetailsStore } from '$lib/audio/episode-details'; -import { podcast_preferences } from '$lib/preferences'; +import { user_preferences } from '$lib/preferences'; import { podcast_progress } from '$lib/progress'; import type { EpisodeAttributes, EpisodeDetails } from '$lib/types'; import { warn } from '$lib/utility/package/log'; @@ -52,7 +52,7 @@ export const episode_audio = { console.log('podcast_progress', podcast_progress.data); el.currentTime = progress?.start_at || 0; - const preferences = get(podcast_preferences); + const preferences = get(user_preferences); el.playbackRate = preferences.playback_rate; el.volume = preferences.volume; diff --git a/src/lib/preferences/_private.ts b/src/lib/preferences/_private.ts deleted file mode 100644 index f5c5d92..0000000 --- a/src/lib/preferences/_private.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { UserPreferences } from '$lib/types'; -import { writable } from 'svelte/store'; - -export const _default_user_preferences = { - playback_rate: 1, - volume: 1, -} satisfies UserPreferences; - -export const _user_preferences = writable(_default_user_preferences); diff --git a/src/lib/preferences/local-storage.ts b/src/lib/preferences/db-local-storage.ts similarity index 63% rename from src/lib/preferences/local-storage.ts rename to src/lib/preferences/db-local-storage.ts index 806d0fa..54e0eba 100644 --- a/src/lib/preferences/local-storage.ts +++ b/src/lib/preferences/db-local-storage.ts @@ -1,23 +1,24 @@ import { browser } from '$app/environment'; -import { edit_preference } from '$lib/preferences/edit'; -import { _user_preferences } from '$lib/preferences/_private'; +import { user_preferences } from '$lib/preferences/db-state'; + import type { UserPreferences } from '$lib/types'; import { info, warn } from '$lib/utility/package/log'; +import { get } from 'svelte/store'; const USER_PREFERENCE_KEY = 'USER_PREFERENCE' as const; -export function save() { +export function save_preferences() { if (!browser || !localStorage) { warn('localStorage not available, skipping save'); return; } - return _user_preferences.subscribe((prefs) => { - info(`Saving user preferences to localStorage`, prefs); - localStorage.setItem(USER_PREFERENCE_KEY, JSON.stringify(prefs)); - })(); + + const preferences = get(user_preferences); + info(`Saving user preferences to localStorage`, preferences); + localStorage.setItem(USER_PREFERENCE_KEY, JSON.stringify(preferences)); } -export function load() { +export function load_preferences() { if (!browser || !localStorage) { warn('localStorage not available, skipping load'); return; @@ -30,7 +31,7 @@ export function load() { } const preferences = JSON.parse(data) as UserPreferences; - edit_preference(preferences); + user_preferences.edit(preferences); info(`Loaded user preferences from localStorage`, preferences); } diff --git a/src/lib/preferences/db-state.ts b/src/lib/preferences/db-state.ts new file mode 100644 index 0000000..1a77aa7 --- /dev/null +++ b/src/lib/preferences/db-state.ts @@ -0,0 +1,35 @@ +import type { UserPreferences } from '$lib/types'; +import clamp from 'just-clamp'; +import { writable } from 'svelte/store'; +import { load_preferences, save_preferences } from './db-local-storage'; + +const _default_user_preferences = { + playback_rate: 1, + volume: 1, +} satisfies UserPreferences; + +const _user_preferences = writable(_default_user_preferences); + +function clamp_preferences(prefs: UserPreferences) { + return { + playback_rate: clamp(prefs.playback_rate, 0.5, 5), + volume: clamp(prefs.volume, 0, 1), + }; +} + +function edit(prefs: Partial) { + _user_preferences.update((prev) => clamp_preferences({ ...prev, ...prefs })); + save_preferences(); +} + +const clear = () => { + _user_preferences.set(_default_user_preferences); + save_preferences(); +}; + +export const user_preferences = { + subscribe: _user_preferences.subscribe, + edit, + clear, + load: load_preferences, +}; diff --git a/src/lib/preferences/edit.ts b/src/lib/preferences/edit.ts deleted file mode 100644 index fb727c8..0000000 --- a/src/lib/preferences/edit.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { _user_preferences } from '$lib/preferences/_private'; -import type { UserPreferences } from '$lib/types'; -import clamp from 'just-clamp'; -import { save } from './local-storage'; - -function clamp_preferences(prefs: UserPreferences) { - return { - playback_rate: clamp(prefs.playback_rate, 0.5, 5), - volume: clamp(prefs.volume, 0, 1), - }; -} - -export function edit_preference(prefs: Partial) { - _user_preferences.update((prev) => clamp_preferences({ ...prev, ...prefs })); - save(); -} diff --git a/src/lib/preferences/index.ts b/src/lib/preferences/index.ts index 7d359bd..1bed929 100644 --- a/src/lib/preferences/index.ts +++ b/src/lib/preferences/index.ts @@ -1,14 +1 @@ -import { edit_preference } from '$lib/preferences/edit'; -import { _default_user_preferences, _user_preferences } from '$lib/preferences/_private'; -import { load, save } from './local-storage'; - -export const podcast_preferences = { - subscribe: _user_preferences.subscribe, - edit: edit_preference, - load, - save, - clear() { - _user_preferences.set(_default_user_preferences); - save(); - }, -}; +export * from './db-state'; diff --git a/src/lib/utility/use-state.ts b/src/lib/utility/use-state.ts index 686d17b..a46c1c4 100644 --- a/src/lib/utility/use-state.ts +++ b/src/lib/utility/use-state.ts @@ -1,12 +1,7 @@ -import { podcast_preferences } from '$lib/preferences'; +import { user_preferences } from '$lib/preferences'; import { podcast_progress } from '$lib/progress'; -export function save_podcast_state() { - podcast_progress.save(); - podcast_preferences.save(); -} - export function load_podcast_state() { podcast_progress.load(); - podcast_preferences.load(); + user_preferences.load(); } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 641963b..602b4fd 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,5 +1,5 @@