diff --git a/src/lib/audio/episode-data.ts b/src/lib/audio/episode-data.ts index 1f932b5..4d430fb 100644 --- a/src/lib/audio/episode-data.ts +++ b/src/lib/audio/episode-data.ts @@ -42,14 +42,11 @@ const no_element = (action: string) => warn(`could not ${action} :: no audio ele export const episode_audio = { subscribe: episode_attributes.subscribe, load: (src: string, details: EpisodeDetails) => { - podcast_progress.stash(); + podcast_progress.stash_episode(); const el = get(audio_element); if (!el) return no_element('load'); - const progress = podcast_progress.get(src); + const progress = podcast_progress.get_episode(src); el.src = src; - console.log('progress', progress); - console.log('src', src); - console.log('podcast_progress', podcast_progress.data); el.currentTime = progress?.start_at || 0; const preferences = get(user_preferences); @@ -59,7 +56,7 @@ export const episode_audio = { episode_details.set(details); }, unload: () => { - podcast_progress.stash(); + podcast_progress.stash_episode(); const el = get(audio_element); if (!el) return no_element('unload'); el.src = ''; @@ -76,7 +73,7 @@ export const episode_audio = { } }, pause: (t?: HandleType) => { - podcast_progress.stash(); + podcast_progress.stash_episode(); const el = get(audio_element); if (!el) return no_element('pause'); diff --git a/src/lib/preferences/db-state.ts b/src/lib/preferences/db-state.ts index 1a77aa7..e4fd3df 100644 --- a/src/lib/preferences/db-state.ts +++ b/src/lib/preferences/db-state.ts @@ -3,24 +3,18 @@ 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 _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), - }; -} +const clamp_preferences = (prefs: UserPreferences) => ({ + playback_rate: clamp(prefs.playback_rate, 0.5, 5), + volume: clamp(prefs.volume, 0, 1), +}); -function edit(prefs: Partial) { +const edit = (prefs: Partial) => { _user_preferences.update((prev) => clamp_preferences({ ...prev, ...prefs })); save_preferences(); -} +}; const clear = () => { _user_preferences.set(_default_user_preferences); diff --git a/src/lib/progress/local-storage.ts b/src/lib/progress/db-local-storage.ts similarity index 94% rename from src/lib/progress/local-storage.ts rename to src/lib/progress/db-local-storage.ts index 965b5a1..ea5a64c 100644 --- a/src/lib/progress/local-storage.ts +++ b/src/lib/progress/db-local-storage.ts @@ -5,7 +5,7 @@ import { error, info, warn } from '$lib/utility/package/log'; type SavedEpisodeProgress = { src: string; current_time: number }; const EPISODE_PROGRESS_KEY = 'EPISODE_PROGRESS' as const; -export function save_all() { +export function save_podcast_progress() { if (!browser || !localStorage) { warn('localStorage not available, skipping save'); return; @@ -22,7 +22,7 @@ export function save_all() { localStorage.setItem(EPISODE_PROGRESS_KEY, JSON.stringify(episodes)); } -export function load_all() { +export function load_podcast_progress() { if (!browser || !localStorage) { warn('localStorage not available, skipping load'); return; diff --git a/src/lib/progress/db-state.ts b/src/lib/progress/db-state.ts new file mode 100644 index 0000000..9e1b811 --- /dev/null +++ b/src/lib/progress/db-state.ts @@ -0,0 +1,43 @@ +import { episode_audio, episode_progress } from '$lib/audio'; +import { _episode_progress_map } from '$lib/progress/_private'; +import type { AudioLoadOptions } from '$lib/types'; +import { info } from '$lib/utility/package/log'; +import { get } from 'svelte/store'; +import { load_podcast_progress, save_podcast_progress } from './db-local-storage'; + +const get_src_pathname = (src: string) => { + if (src.startsWith('http')) return new URL(src).pathname; + else return new URL(src, 'https://svelte.dev').pathname; +}; + +const stash_episode_progress = () => { + const audio = get(episode_audio); + console.log('audio', audio); + if (!audio?.src) return; + info('saving progress: ', audio.src); + const pathname = get_src_pathname(audio.src); + _episode_progress_map.set(pathname, get(episode_progress).current_time); + save_podcast_progress(); +}; + +const get_episode_progress = (src: string): Pick | null => { + const start_at = _episode_progress_map.get(src); + + if (!start_at) return null; + + info('found saved progress: ', src, start_at); + + return { start_at: start_at }; +}; + +const clear = () => { + _episode_progress_map.clear(); + save_podcast_progress(); +}; + +export const podcast_progress = { + stash_episode: stash_episode_progress, + get_episode: get_episode_progress, + load: load_podcast_progress, + clear, +}; diff --git a/src/lib/progress/index.ts b/src/lib/progress/index.ts index 5c1815c..1bed929 100644 --- a/src/lib/progress/index.ts +++ b/src/lib/progress/index.ts @@ -1,39 +1 @@ -import { episode_audio, episode_progress } from '$lib/audio'; -import { _episode_progress_map } from '$lib/progress/_private'; -import type { AudioLoadOptions } from '$lib/types'; -import { info } from '$lib/utility/package/log'; -import { get } from 'svelte/store'; -import { load_all, save_all } from './local-storage'; - -const get_src_pathname = (src: string) => { - if (src.startsWith('http')) return new URL(src).pathname; - else return new URL(src, 'https://svelte.dev').pathname; -}; - -export const podcast_progress = { - data: _episode_progress_map, - stash() { - const audio = get(episode_audio); - console.log('audio', audio); - if (!audio?.src) return; - info('saving progress: ', audio.src); - const pathname = get_src_pathname(audio.src); - _episode_progress_map.set(pathname, get(episode_progress).current_time); - save_all(); - }, - get(src: string): Pick | null { - const start_at = _episode_progress_map.get(src); - - if (!start_at) return null; - - info('found saved progress: ', src, start_at); - - return { start_at: start_at }; - }, - save: save_all, - load: load_all, - clear_all() { - _episode_progress_map.clear(); - save_all(); - }, -}; +export * from './db-state'; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 602b4fd..1cbaf01 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -31,7 +31,8 @@

Demo

Another Page - + +
Load Audio