diff --git a/apps/readest-app/src/app/library/components/ReadingProgress.tsx b/apps/readest-app/src/app/library/components/ReadingProgress.tsx index 4f1c5791..b5e1d8be 100644 --- a/apps/readest-app/src/app/library/components/ReadingProgress.tsx +++ b/apps/readest-app/src/app/library/components/ReadingProgress.tsx @@ -13,7 +13,8 @@ const getProgressPercentage = (book: Book) => { if (book.progress && book.progress[1] === 1) { return 100; } - return Math.round((book.progress[0] / book.progress[1]) * 100); + const percentage = Math.round((book.progress[0] / book.progress[1]) * 100); + return Math.max(0, Math.min(100, percentage)); }; const ReadingProgress: React.FC = memo( diff --git a/apps/readest-app/src/app/library/hooks/useBooksSync.ts b/apps/readest-app/src/app/library/hooks/useBooksSync.ts index 612e7cbb..64d65a42 100644 --- a/apps/readest-app/src/app/library/hooks/useBooksSync.ts +++ b/apps/readest-app/src/app/library/hooks/useBooksSync.ts @@ -85,9 +85,8 @@ export const useBooksSync = ({ onSyncStart, onSyncEnd }: UseBooksSyncProps) => { } const mergedBook = matchingBook.updatedAt > oldBook.updatedAt - ? { ...oldBook, ...matchingBook, updatedAt: oldBook.updatedAt } - : { ...matchingBook, ...oldBook, updatedAt: oldBook.updatedAt }; - mergedBook.progress = matchingBook.progress ?? oldBook.progress; + ? { ...oldBook, ...matchingBook } + : { ...matchingBook, ...oldBook }; return mergedBook; } return oldBook; diff --git a/apps/readest-app/src/app/reader/components/FooterBar.tsx b/apps/readest-app/src/app/reader/components/FooterBar.tsx index e1c0a191..2ae28591 100644 --- a/apps/readest-app/src/app/reader/components/FooterBar.tsx +++ b/apps/readest-app/src/app/reader/components/FooterBar.tsx @@ -70,7 +70,9 @@ const FooterBar: React.FC = ({ const isVisible = hoveredBookKey === bookKey; const progressInfo = bookFormat === 'PDF' ? section : pageinfo; const progressValid = !!progressInfo; - const progressFraction = progressValid ? (progressInfo!.current + 1) / progressInfo!.total : 0; + const progressFraction = progressValid + ? ((progressInfo!.next ?? progressInfo!.current) + 1) / progressInfo!.total + : 0; return ( <> diff --git a/apps/readest-app/src/app/reader/components/PageInfo.tsx b/apps/readest-app/src/app/reader/components/PageInfo.tsx index a4b415fb..6146f55f 100644 --- a/apps/readest-app/src/app/reader/components/PageInfo.tsx +++ b/apps/readest-app/src/app/reader/components/PageInfo.tsx @@ -32,7 +32,7 @@ const PageInfoView: React.FC = ({ ? _( isVertical ? '{{currentPage}} ยท {{totalPage}}' : 'Loc. {{currentPage}} / {{totalPage}}', { - currentPage: pageinfo.current + 1, + currentPage: (pageinfo.next ?? pageinfo.current) + 1, totalPage: pageinfo.total, }, ) diff --git a/apps/readest-app/src/app/reader/components/SectionInfo.tsx b/apps/readest-app/src/app/reader/components/SectionInfo.tsx index 1b309972..564451db 100644 --- a/apps/readest-app/src/app/reader/components/SectionInfo.tsx +++ b/apps/readest-app/src/app/reader/components/SectionInfo.tsx @@ -32,7 +32,12 @@ const SectionInfo: React.FC = ({ : { paddingLeft: `${horizontalGap}%` } } > -

+

{section || ''}

diff --git a/apps/readest-app/src/store/bookDataStore.ts b/apps/readest-app/src/store/bookDataStore.ts index 12641574..fcd694fb 100644 --- a/apps/readest-app/src/store/bookDataStore.ts +++ b/apps/readest-app/src/store/bookDataStore.ts @@ -66,6 +66,7 @@ export const useBookDataStore = create((set, get) => ({ const bookIndex = library.findIndex((b) => b.hash === bookKey.split('-')[0]); if (bookIndex == -1) return; const book = library.splice(bookIndex, 1)[0]!; + book.progress = config.progress; book.updatedAt = Date.now(); library.unshift(book); setLibrary(library); diff --git a/apps/readest-app/src/store/readerStore.ts b/apps/readest-app/src/store/readerStore.ts index e921542f..c82ffb68 100644 --- a/apps/readest-app/src/store/readerStore.ts +++ b/apps/readest-app/src/store/readerStore.ts @@ -222,7 +222,7 @@ export const useReaderStore = create((set, get) => ({ const viewState = state.viewStates[key]; if (!viewState || !bookData) return state; - const progress: [number, number] = [pageinfo.current, pageinfo.total]; + const progress: [number, number] = [(pageinfo.next ?? pageinfo.current) + 1, pageinfo.total]; // Update library book progress const { library, setLibrary } = useLibraryStore.getState(); diff --git a/apps/readest-app/src/types/book.ts b/apps/readest-app/src/types/book.ts index 397551ae..e94eb566 100644 --- a/apps/readest-app/src/types/book.ts +++ b/apps/readest-app/src/types/book.ts @@ -24,7 +24,7 @@ export interface Book { downloadedAt?: number | null; lastUpdated?: number; // deprecated in favor of updatedAt - progress?: [number, number]; // Add progress field: [current, total] + progress?: [number, number]; // Add progress field: [current, total], 1-based page number } export interface BookGroupType { @@ -149,7 +149,7 @@ export interface BookSearchResult { export interface BookConfig { bookHash?: string; - progress?: [number, number]; + progress?: [number, number]; // [current pagenum, total pagenum], 1-based page number location?: string; booknotes?: BookNote[]; searchConfig?: Partial;