From 908ef0d36d2c4b16ede04d53dcc4e09e5d722afe Mon Sep 17 00:00:00 2001 From: Ollie Taylor <13766232+OllieJT@users.noreply.github.com> Date: Fri, 24 Feb 2023 23:44:23 +0000 Subject: [PATCH 1/6] adds /dist to eslintignore --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index 3897265..1d4b507 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,6 +3,7 @@ node_modules /build /.svelte-kit /package +/dist .env .env.* !.env.example From 42c27b2469b3085af321b743991a6da29cd0cac3 Mon Sep 17 00:00:00 2001 From: Ollie Taylor <13766232+OllieJT@users.noreply.github.com> Date: Sat, 25 Feb 2023 14:16:19 +0000 Subject: [PATCH 2/6] refactor audio to use custom listener stores --- src/lib/audio/_private.ts | 17 ---- src/lib/audio/audio-element.ts | 25 +++++ src/lib/audio/audio-loader.svelte | 81 ++------------- src/lib/audio/episode-data.ts | 140 +++++++++++++++++++++++++ src/lib/audio/episode-details.ts | 5 + src/lib/audio/episode-progress.ts | 30 ++++++ src/lib/audio/index.ts | 147 +-------------------------- src/lib/progress/index.ts | 32 +++--- src/lib/progress/local-storage.ts | 2 + src/lib/utility/use-state.ts | 4 +- src/routes/+layout.svelte | 2 +- src/routes/+page.svelte | 66 +++++------- src/routes/another-page/+page.svelte | 21 +--- 13 files changed, 259 insertions(+), 313 deletions(-) delete mode 100644 src/lib/audio/_private.ts create mode 100644 src/lib/audio/audio-element.ts create mode 100644 src/lib/audio/episode-data.ts create mode 100644 src/lib/audio/episode-details.ts create mode 100644 src/lib/audio/episode-progress.ts diff --git a/src/lib/audio/_private.ts b/src/lib/audio/_private.ts deleted file mode 100644 index efbb9e2..0000000 --- a/src/lib/audio/_private.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { AudioMetadata, AudioPlayerElement } from '$lib/types'; -import { writable } from 'svelte/store'; - -// readonly - stores will update when bindings change -export const _current_time = writable(0); -export const _element = writable(); -export const _duration = writable(0); -export const _ended = writable(false); -export const _loading = writable(false); -export const _paused = writable(true); - -// handlers - when store value changes, the binding will update the audio element -export const _start_at = writable(0); -export const _autoplay = writable(false); -export const _muted = writable(false); -export const _src = writable(''); -export const _metadata = writable(null); diff --git a/src/lib/audio/audio-element.ts b/src/lib/audio/audio-element.ts new file mode 100644 index 0000000..7b3b371 --- /dev/null +++ b/src/lib/audio/audio-element.ts @@ -0,0 +1,25 @@ +import { browser } from '$app/environment'; +import { onMount } from 'svelte'; +import { readable } from 'svelte/store'; + +export const audio_element = readable(null, (set) => { + if (!browser) return; + const ID = 'svelte-podcast-generated-audio-element'; + onMount(() => { + const el = document.createElement('audio'); + el.id = ID; + el.setAttribute('preload', 'metadata'); + el.muted = false; + el.autoplay = true; + el.controls = true; + document.body.appendChild(el); + set(el); + }); + + return () => { + const element = document.getElementById(ID); + element ? element.remove() : null; + }; +}); + +export type AudioElementStore = typeof audio_element; diff --git a/src/lib/audio/audio-loader.svelte b/src/lib/audio/audio-loader.svelte index ba26eb2..94745c3 100644 --- a/src/lib/audio/audio-loader.svelte +++ b/src/lib/audio/audio-loader.svelte @@ -1,76 +1,13 @@ - -