diff --git a/apps/readest-app/src/app/library/page.tsx b/apps/readest-app/src/app/library/page.tsx index 4161e377..a5608591 100644 --- a/apps/readest-app/src/app/library/page.tsx +++ b/apps/readest-app/src/app/library/page.tsx @@ -511,9 +511,9 @@ const LibraryPageContent = ({ searchParams }: { searchParams: ReadonlyURLSearchP } }; - const handleBookDownload = async (book: Book) => { + const handleBookDownload = async (book: Book, redownload = false) => { try { - await appService?.downloadBook(book, false, (progress) => { + await appService?.downloadBook(book, false, redownload, (progress) => { updateBookTransferProgress(book.hash, progress); }); await updateBook(envConfig, book); diff --git a/apps/readest-app/src/components/metadata/BookDetailModal.tsx b/apps/readest-app/src/components/metadata/BookDetailModal.tsx index 2d3ef170..9df90cdf 100644 --- a/apps/readest-app/src/components/metadata/BookDetailModal.tsx +++ b/apps/readest-app/src/components/metadata/BookDetailModal.tsx @@ -18,7 +18,7 @@ interface BookDetailModalProps { book: Book; isOpen: boolean; onClose: () => void; - handleBookDownload?: (book: Book) => void; + handleBookDownload?: (book: Book, redownload?: boolean) => void; handleBookUpload?: (book: Book) => void; handleBookDelete?: (book: Book) => void; handleBookDeleteCloudBackup?: (book: Book) => void; @@ -132,7 +132,7 @@ const BookDetailModal: React.FC = ({ const handleRedownload = async () => { handleClose(); if (handleBookDownload) { - handleBookDownload(book); + handleBookDownload(book, true); } }; diff --git a/apps/readest-app/src/services/appService.ts b/apps/readest-app/src/services/appService.ts index ff81b823..e7683d74 100644 --- a/apps/readest-app/src/services/appService.ts +++ b/apps/readest-app/src/services/appService.ts @@ -381,13 +381,19 @@ export abstract class BaseAppService implements AppService { } } - async downloadBook(book: Book, onlyCover = false, onProgress?: ProgressHandler): Promise { + async downloadBook( + book: Book, + onlyCover = false, + redownload = false, + onProgress?: ProgressHandler, + ): Promise { let bookDownloaded = false; let bookCoverDownloaded = false; const completedFiles = { count: 0 }; let toDownloadFpCount = 0; - const needDownCover = !(await this.fs.exists(getCoverFilename(book), 'Books')); - const needDownBook = !onlyCover && !(await this.fs.exists(getLocalBookFilename(book), 'Books')); + const needDownCover = !(await this.fs.exists(getCoverFilename(book), 'Books')) || redownload; + const needDownBook = + (!onlyCover && !(await this.fs.exists(getLocalBookFilename(book), 'Books'))) || redownload; if (needDownCover) { toDownloadFpCount++; } diff --git a/apps/readest-app/src/types/system.ts b/apps/readest-app/src/types/system.ts index 079ffb0e..759ad754 100644 --- a/apps/readest-app/src/types/system.ts +++ b/apps/readest-app/src/types/system.ts @@ -59,7 +59,12 @@ export interface AppService { ): Promise; deleteBook(book: Book, includingUploaded?: boolean, includingLocal?: boolean): Promise; uploadBook(book: Book, onProgress?: ProgressHandler): Promise; - downloadBook(book: Book, onlyCover?: boolean, onProgress?: ProgressHandler): Promise; + downloadBook( + book: Book, + onlyCover?: boolean, + redownload?: boolean, + onProgress?: ProgressHandler, + ): Promise; isBookAvailable(book: Book): Promise; getBookFileSize(book: Book): Promise; loadBookConfig(book: Book, settings: SystemSettings): Promise;