diff --git a/web/src/reader/features/progress-indicator.ts b/web/src/reader/features/progress-indicator.ts index 429ac1e..7681ed5 100644 --- a/web/src/reader/features/progress-indicator.ts +++ b/web/src/reader/features/progress-indicator.ts @@ -1,4 +1,5 @@ import type { ReaderContext } from "../core/reader-context"; +import { getCurrentPageFromScroll } from "../ebook/page-calculator"; interface ProgressDisplay { mode: "pages" | "chapter" | "percentage" | "time-left"; text: string; @@ -111,14 +112,27 @@ function updateProgressDisplay(context: ReaderContext): void { let currentPage = 0; let totalPages = 0; if (state.currentReader.type === "ebook") { - currentPage = state.currentReader.currentSpineIndex + 1; - totalPages = state.currentReader.cif.spine.length; - } else if (state.currentReader.type === "pdf") { - currentPage = state.currentReader.currentPage; - totalPages = state.readerMetadata?.total_pages || 0; - } else { - currentPage = state.currentReader.currentPage; - totalPages = state.currentReader.images.length; + const reader = state.currentReader as any; + const pageInfo = reader.pageCalculationResult; + + if (pageInfo && pageInfo.totalPages > 0) { + const container = document.getElementById("reader-content"); + const viewportHeight = window.innerHeight; + currentPage = getCurrentPageFromScroll( + pageInfo, + reader.currentSpineIndex, + container?.scrollTop || 0, + viewportHeight, + ); + totalPages = pageInfo.totalPages; + } else { + // Fallback to estimated pages while calculating + currentPage = reader.currentSpineIndex + 1; + totalPages = + state.readerMetadata?.total_pages || + state.currentReader.cif.locations?.estimatedPages || + state.currentReader.cif.spine.length; + } } getReadingSpeed().then((speed) => { const result = calculateProgress(