Connect reading plans to study/audio, cache offline audio, add journal export
Build and Push Docker Image / build-and-push (push) Successful in 4m33s

Reading plan days now offer "Study this" (seeds a new chunk-builder project
with the day's full passage and jumps straight into the Study editor) and
"Listen" (starts book-mode audio at the right chapter via a new
handlePlayBookAudioFrom, avoiding a stale-closure bug the reader-state
approach would hit). Fixed the "Listen to BSB Audio" player only rendering
when a study project existed, leaving Listen with nowhere to show up.

The service worker now caches audio.bible.helloao.org (the actual host
serving narrator audio, not just the text/cross-ref API) and no longer
tries to cache 206 Partial Content responses, which the Cache API rejects
and was throwing unhandled rejections for every range-requested audio file.

Added a reading journal export (Settings > My reading journal): gathers
bookmarks, text highlights, and completed plans, fetches their verse text,
and offers a .docx download or a print-to-PDF page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 5 committed 2026-09-23 13:41:40 -04:00
1 parent 1dd6aef6a5
commit 787edcbe73
8 files changed
+604 -105

No files matched your search

+15
View File
@@ -67,6 +67,20 @@ export function useAudio(readerBookAbbrev, readerChapter) {
}
};
// Starts book-mode playback at an arbitrary chapter (e.g. a reading plan's
// "today" chapter) instead of always chapter 1. Explicit args avoid relying
// on reader state that may not have re-rendered yet if called right after
// navigating there in the same event handler.
const handlePlayBookAudioFrom = async (abbrev, startChapter) => {
audioModeRef.current = 'book';
setAudioBook(abbrev);
try {
await playAudioChapter(abbrev, startChapter, audioNarrator);
} catch {
setAudioState({ status: 'error', chapter: 0, total: 0 });
}
};
const handleStopBookAudio = () => {
if (audioRef.current) {
audioRef.current.pause();
@@ -161,6 +175,7 @@ export function useAudio(readerBookAbbrev, readerChapter) {
audioState,
audioProgress,
handlePlayBookAudio,
handlePlayBookAudioFrom,
handleStopBookAudio,
handleToggleBookAudioPause,
handleSkipBookChapter,