From 174a80caa013288c351596de533df83a2530ab5f Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sat, 2 Aug 2025 14:55:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/data/dao/BookDao.kt | 7 +++++++ .../java/io/legado/app/ui/book/audio/AudioPlayViewModel.kt | 3 +-- .../java/io/legado/app/ui/book/info/BookInfoViewModel.kt | 3 +-- .../java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt | 3 +-- .../java/io/legado/app/ui/book/read/ReadBookViewModel.kt | 3 +-- app/src/main/java/io/legado/app/ui/main/MainViewModel.kt | 3 +-- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/dao/BookDao.kt b/app/src/main/java/io/legado/app/data/dao/BookDao.kt index a809d31ce..e2cec7bd3 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookDao.kt @@ -5,6 +5,7 @@ import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import androidx.room.Transaction import androidx.room.Update import io.legado.app.constant.BookType import io.legado.app.data.entities.Book @@ -150,6 +151,12 @@ interface BookDao { @Delete fun delete(vararg book: Book) + @Transaction + fun replace(oldBook: Book, newBook: Book) { + delete(oldBook) + insert(newBook) + } + @Query("update books set durChapterPos = :pos where bookUrl = :bookUrl") fun upProgress(bookUrl: String, pos: Int) diff --git a/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayViewModel.kt b/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayViewModel.kt index a835fea03..1fcbd85e7 100644 --- a/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayViewModel.kt @@ -71,8 +71,7 @@ class AudioPlayViewModel(application: Application) : BaseViewModel(application) if (oldBook.bookUrl == book.bookUrl) { appDb.bookDao.update(book) } else { - appDb.bookDao.delete(oldBook) - appDb.bookDao.insert(book) + appDb.bookDao.replace(oldBook, book) } appDb.bookChapterDao.delByBook(book.bookUrl) appDb.bookChapterDao.insert(*cList.toTypedArray()) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index d6aa43370..81656879f 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -235,8 +235,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { WebBook.getChapterList(scope, bookSource, book, runPreUpdateJs) .onSuccess(IO) { if (inBookshelf) { - appDb.bookDao.delete(oldBook) - book.save() + appDb.bookDao.replace(oldBook, book) /** * runPreUpdateJs 有可能会修改 book 的 bookUrl */ diff --git a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt index ebff9e633..6b58a0288 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt @@ -118,8 +118,7 @@ class ReadMangaViewModel(application: Application) : BaseViewModel(application) if (oldBook.bookUrl == book.bookUrl) { appDb.bookDao.update(book) } else { - appDb.bookDao.delete(oldBook) - appDb.bookDao.insert(book) + appDb.bookDao.replace(oldBook, book) BookHelp.updateCacheFolder(oldBook, book) } appDb.bookChapterDao.delByBook(oldBook.bookUrl) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index dee43e144..5bc82cbbe 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -214,8 +214,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { if (oldBook.bookUrl == book.bookUrl) { appDb.bookDao.update(book) } else { - appDb.bookDao.delete(oldBook) - appDb.bookDao.insert(book) + appDb.bookDao.replace(oldBook, book) BookHelp.updateCacheFolder(oldBook, book) } appDb.bookChapterDao.delByBook(oldBook.bookUrl) diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt index 38873e02b..b7ac2e888 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt @@ -167,8 +167,7 @@ class MainViewModel(application: Application) : BaseViewModel(application) { if (book.bookUrl == bookUrl) { appDb.bookDao.update(book) } else { - appDb.bookDao.delete(oldBook) - appDb.bookDao.insert(book) + appDb.bookDao.replace(oldBook, book) BookHelp.updateCacheFolder(oldBook, book) } appDb.bookChapterDao.delByBook(bookUrl)