diff --git a/web/src/reader/core/reader-navigation.ts b/web/src/reader/core/reader-navigation.ts index 462efe9..9d3471c 100644 --- a/web/src/reader/core/reader-navigation.ts +++ b/web/src/reader/core/reader-navigation.ts @@ -20,6 +20,11 @@ export function createNavigationAPI() { const book = state.currentReader as UniversalReader; if (!reflowableNav.canGoNext(book)) { + console.log("canGoNext returned false:", { + currentPage: book.position.currentPage, + totalPages: book.pagination?.totalPages, + pagination: book.pagination, + }); return; // Already at last page } @@ -42,6 +47,12 @@ export function createNavigationAPI() { // Update UI updatePageIndicator(updatedBook); sendProgressUpdate(); + // Emit progress event for page counter + readerEvents.emit("progressUpdated", { + currentPage: updatedBook.currentPage, + totalPages: updatedBook.pagination?.totalPages || 0, + percentage: updatedBook.position?.progress || 0, + }); } } else if (state.currentReader.type === "pdf") { // Keep existing PDF code (lines 45-51) @@ -99,6 +110,13 @@ export function createNavigationAPI() { // Update UI updatePageIndicator(updatedBook); sendProgressUpdate(); + + // Emit progress event for page counter + readerEvents.emit("progressUpdated", { + currentPage: updatedBook.currentPage, + totalPages: updatedBook.pagination?.totalPages || 0, + percentage: updatedBook.position?.progress || 0, + }); } } else if (state.currentReader.type === "pdf") { if (state.currentReader.currentPage > 1) { @@ -245,21 +263,20 @@ function setupScrollTracking(): void { function updatePageFromScroll(container: HTMLElement): void { const state = getState(); if (!state.currentReader || state.currentReader.type !== "ebook") return; - const viewportHeight = window.innerHeight - 120; const scrollTop = container.scrollTop; const contentHeight = container.scrollHeight; - const currentPage = Math.floor(scrollTop / viewportHeight) + 1; - const totalPages = Math.max(1, Math.ceil(contentHeight / viewportHeight)); - const percentage = contentHeight > 0 ? (scrollTop / contentHeight) * 100 : 0; - state.currentReader.currentPage = currentPage; - state.currentReader.currentScrollPosition = scrollTop; - setState({ currentReader: state.currentReader }); + const percentage = contentHeight > 0 ? scrollTop / contentHeight : 0; + setState({ + currentReader: { + ...state.currentReader, + currentScrollPosition: scrollTop, + }, + }); readerEvents.emit("progressUpdated", { - currentPage, - totalPages, + currentPage: state.currentReader.currentPage, + totalPages: state.currentReader.pagination?.totalPages || 0, percentage, scrollTop, - contentHeight, }); }