From 1f83a7c05f087a515ae54388791e7094640b721e Mon Sep 17 00:00:00 2001 From: root Date: Mon, 6 Apr 2026 21:12:10 +0500 Subject: [PATCH] feat: add chapter announcing setting to audio player MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When enabled, the Web Speech API speaks the upcoming chapter number and title (e.g. 'Chapter 12 — The Final Battle') between auto-next chapters, giving an audible cue before the next narration begins. - AudioStore.announceChapter ( boolean, default false) - PBUserSettings.announce_chapter persisted to PocketBase - GET/PUT /api/settings includes announceChapter field - +layout.server.ts loads + defaults the field - +layout.svelte applies on load, saves in debounced PUT, and fires SpeechSynthesisUtterance in onended before navigating (falls back to immediate navigation if speechSynthesis is unavailable) - ListeningMode: 'Announce' pill added to the Speed · Auto · Sleep row --- ui/src/lib/audio.svelte.ts | 7 ++++++ ui/src/lib/components/ListeningMode.svelte | 23 ++++++++++++++++-- ui/src/lib/server/pocketbase.ts | 4 +++- ui/src/routes/+layout.server.ts | 5 ++-- ui/src/routes/+layout.svelte | 27 ++++++++++++++++++---- ui/src/routes/api/settings/+server.ts | 12 +++++++--- 6 files changed, 66 insertions(+), 12 deletions(-) diff --git a/ui/src/lib/audio.svelte.ts b/ui/src/lib/audio.svelte.ts index bd28b61..9d5cb00 100644 --- a/ui/src/lib/audio.svelte.ts +++ b/ui/src/lib/audio.svelte.ts @@ -101,6 +101,13 @@ class AudioStore { */ autoNext = $state(false); + /** + * When true, announces the upcoming chapter number and title via the + * Web Speech API before auto-next navigation fires. + * e.g. "Chapter 12 — The Final Battle" + */ + announceChapter = $state(false); + /** * The next chapter number for the currently playing chapter, or null if * there is no next chapter. Written by the chapter page's AudioPlayer. diff --git a/ui/src/lib/components/ListeningMode.svelte b/ui/src/lib/components/ListeningMode.svelte index d08ccd1..ff49b16 100644 --- a/ui/src/lib/components/ListeningMode.svelte +++ b/ui/src/lib/components/ListeningMode.svelte @@ -618,8 +618,8 @@ {/if} - -
+ +
{#each SPEED_OPTIONS as s} @@ -661,6 +661,25 @@ {/if} + + +