From f57d64563bb0cec59d0c39659042130deff033e4 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Tue, 2 Jun 2026 19:46:03 -0400 Subject: [PATCH] fix(reader): scale percentage correctly, add 5s init guard - reader.templ: divide DB percentage (0-1) by 100 was wrong; actually the router multiplies by 100, so template now divides by 100 to get back to 0-1 range for foliate-js savedPercentage - reader.ts: add 5-second initTime guard to prevent overwriting existing progress with initial position on page load --- templates/reader.templ | 2 +- templates/reader_templ.go | 2 +- web/src/reader/reader.ts | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/templates/reader.templ b/templates/reader.templ index 91b7585..95b9ed1 100644 --- a/templates/reader.templ +++ b/templates/reader.templ @@ -14,7 +14,7 @@ func readerInitExpr(metadata ReaderMetadata, progress ReadingProgress) string { "mangaType": metadata.MangaType, } if progress.Percentage > 0 { - config["savedPercentage"] = progress.Percentage + config["savedPercentage"] = progress.Percentage / 100 } if progress.EpubCfi != "" { config["savedCfi"] = progress.EpubCfi diff --git a/templates/reader_templ.go b/templates/reader_templ.go index 05c72f3..46d91e8 100644 --- a/templates/reader_templ.go +++ b/templates/reader_templ.go @@ -22,7 +22,7 @@ func readerInitExpr(metadata ReaderMetadata, progress ReadingProgress) string { "mangaType": metadata.MangaType, } if progress.Percentage > 0 { - config["savedPercentage"] = progress.Percentage + config["savedPercentage"] = progress.Percentage / 100 } if progress.EpubCfi != "" { config["savedCfi"] = progress.EpubCfi diff --git a/web/src/reader/reader.ts b/web/src/reader/reader.ts index e96b488..48f29c3 100644 --- a/web/src/reader/reader.ts +++ b/web/src/reader/reader.ts @@ -383,6 +383,7 @@ document.addEventListener("alpine:init", () => { tocItems: [] as any[], mediaItemId: "" as string, saveTimeout: null as ReturnType | null, + initTime: 0 as number, readingTheme: "light" as string, readingMode: "light" as string, readingFont: "literata" as string, @@ -525,9 +526,11 @@ document.addEventListener("alpine:init", () => { } else { await this.view.init({}); } + this.initTime = Date.now(); this.fetchReadingSpeed(); }, debouncedSaveProgress(fraction: number, location: any, cfi: string) { + if (Date.now() - this.initTime < 5000) return; if (this.saveTimeout) clearTimeout(this.saveTimeout); this.saveTimeout = setTimeout(() => { this.saveProgress(fraction, location, cfi);