diff --git a/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.html b/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.html index 8aea9c244..3473552e0 100644 --- a/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.html +++ b/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.html @@ -77,8 +77,8 @@ } } @else {
- @for (url of infiniteScrollImageUrls; track url; let i = $index) { - Page {{ infiniteScrollPages[i] + 1 }} + @for (pageIdx of infiniteScrollPages; track pageIdx; let i = $index) { + Page {{ pageIdx + 1 }} } @if (isLoadingMore) {
diff --git a/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.ts b/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.ts index fbcc8a78d..5b6200719 100644 --- a/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.ts +++ b/booklore-ui/src/app/features/readers/cbx-reader/cbx-reader.component.ts @@ -2,7 +2,7 @@ import {Component, HostListener, inject, OnDestroy, OnInit} from '@angular/core' import {ActivatedRoute, Router} from '@angular/router'; import {CommonModule} from '@angular/common'; import {forkJoin, Subject} from 'rxjs'; -import {filter, first, map, switchMap, takeUntil, timeout} from 'rxjs/operators'; +import {debounceTime, filter, first, map, switchMap, takeUntil, timeout} from 'rxjs/operators'; import {PageTitleService} from "../../../shared/service/page-title.service"; import {CbxReaderService} from '../../book/service/cbx-reader.service'; import {BookService} from '../../book/service/book.service'; @@ -55,6 +55,7 @@ import {BookNoteV2} from '../../../shared/service/book-note-v2.service'; }) export class CbxReaderComponent implements OnInit, OnDestroy { private destroy$ = new Subject(); + private progressSaveSubject$ = new Subject(); bookType!: BookType; bookId!: number; @@ -156,6 +157,11 @@ export class CbxReaderComponent implements OnInit, OnDestroy { .pipe(takeUntil(this.destroy$)) .subscribe(visible => this.isFooterVisible = visible); + this.progressSaveSubject$.pipe( + debounceTime(2000), + takeUntil(this.destroy$) + ).subscribe(() => this.updateProgress()); + this.subscribeToHeaderEvents(); this.subscribeToSidebarEvents(); this.subscribeToFooterEvents(); @@ -777,7 +783,7 @@ export class CbxReaderComponent implements OnInit, OnDestroy { const newPage = this.infiniteScrollPages[i]; if (newPage !== this.currentPage) { this.currentPage = newPage; - this.updateProgress(); + this.progressSaveSubject$.next(); this.updateSessionProgress(); this.updateFooterPage(); } @@ -786,14 +792,10 @@ export class CbxReaderComponent implements OnInit, OnDestroy { } } - private getPageImageUrl(pageIndex: number): string { + getPageImageUrl(pageIndex: number): string { return this.cbxReaderService.getPageImageUrl(this.bookId, this.pages[pageIndex], this.altBookType); } - get infiniteScrollImageUrls(): string[] { - return this.infiniteScrollPages.map(pageIndex => this.getPageImageUrl(pageIndex)); - } - private updateViewerSetting(): void { const bookSetting: BookSetting = { cbxSettings: { @@ -833,7 +835,7 @@ export class CbxReaderComponent implements OnInit, OnDestroy { this.currentPage = targetIndex; - if (this.scrollMode === CbxScrollMode.INFINITE) { + if (this.scrollMode === CbxScrollMode.INFINITE || this.scrollMode === CbxScrollMode.LONG_STRIP) { this.ensurePageLoaded(targetIndex); this.scrollToPage(targetIndex); this.updateProgress(); @@ -860,7 +862,7 @@ export class CbxReaderComponent implements OnInit, OnDestroy { this.ensurePageLoaded(pageIndex); setTimeout(() => { - const container = document.querySelector('.image-container.infinite-scroll') as HTMLElement; + const container = document.querySelector('.image-container.infinite-scroll, .image-container.long-strip') as HTMLElement; if (!container) return; const images = container.querySelectorAll('.page-image');