From f8f448a19bc3c5e36e343d3063beb39f15cd1cd3 Mon Sep 17 00:00:00 2001 From: ACX <8075870+acx10@users.noreply.github.com> Date: Thu, 12 Feb 2026 08:21:05 -0700 Subject: [PATCH] fix: reset audiobook progress and clear cached progress in UI (#2641) (#2711) --- .../repository/UserBookFileProgressRepository.java | 10 ++++++++++ .../service/progress/ReadingProgressService.java | 5 ++++- .../app/features/book/service/book-patch.service.ts | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/booklore-api/src/main/java/org/booklore/repository/UserBookFileProgressRepository.java b/booklore-api/src/main/java/org/booklore/repository/UserBookFileProgressRepository.java index 6713c2926..7b39079e5 100644 --- a/booklore-api/src/main/java/org/booklore/repository/UserBookFileProgressRepository.java +++ b/booklore-api/src/main/java/org/booklore/repository/UserBookFileProgressRepository.java @@ -6,6 +6,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.data.jpa.repository.Modifying; + import java.util.List; import java.util.Optional; @@ -58,4 +60,12 @@ public interface UserBookFileProgressRepository extends JpaRepository bookIds ); + + @Modifying + @Query(""" + DELETE FROM UserBookFileProgressEntity ubfp + WHERE ubfp.user.id = :userId + AND ubfp.bookFile.book.id IN :bookIds + """) + int deleteByUserIdAndBookIds(@Param("userId") Long userId, @Param("bookIds") Iterable bookIds); } diff --git a/booklore-api/src/main/java/org/booklore/service/progress/ReadingProgressService.java b/booklore-api/src/main/java/org/booklore/service/progress/ReadingProgressService.java index ac1d4ba1e..bd42f98c1 100644 --- a/booklore-api/src/main/java/org/booklore/service/progress/ReadingProgressService.java +++ b/booklore-api/src/main/java/org/booklore/service/progress/ReadingProgressService.java @@ -431,7 +431,10 @@ public class ReadingProgressService { List bookIdList = new ArrayList<>(bookIds); switch (type) { - case BOOKLORE -> userBookProgressRepository.bulkResetBookloreProgress(userId, bookIdList, now); + case BOOKLORE -> { + userBookProgressRepository.bulkResetBookloreProgress(userId, bookIdList, now); + userBookFileProgressRepository.deleteByUserIdAndBookIds(userId, bookIdList); + } case KOREADER -> userBookProgressRepository.bulkResetKoreaderProgress(userId, bookIdList); case KOBO -> { userBookProgressRepository.bulkResetKoboProgress(userId, bookIdList); diff --git a/booklore-ui/src/app/features/book/service/book-patch.service.ts b/booklore-ui/src/app/features/book/service/book-patch.service.ts index 44f74ace0..0db365550 100644 --- a/booklore-ui/src/app/features/book/service/book-patch.service.ts +++ b/booklore-ui/src/app/features/book/service/book-patch.service.ts @@ -163,8 +163,13 @@ export class BookPatchService { const updatedBooks = (currentState.books || []).map(book => { const response = responses.find(r => r.bookId === book.id); if (response) { + const progressReset: Partial = + type === 'KOREADER' ? {koreaderProgress: undefined} : + type === 'KOBO' ? {koboProgress: undefined} : + {epubProgress: undefined, pdfProgress: undefined, cbxProgress: undefined, audiobookProgress: undefined}; return { ...book, + ...progressReset, readStatus: response.readStatus, readStatusModifiedTime: response.readStatusModifiedTime, dateFinished: response.dateFinished