diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 46d7d5075..e1815f3c4 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -364,6 +364,10 @@ data class Book( } } + fun update() { + appDb.bookDao.update(this) + } + fun delete() { if (ReadBook.book?.bookUrl == bookUrl) { ReadBook.book = null diff --git a/app/src/main/java/io/legado/app/model/AudioPlay.kt b/app/src/main/java/io/legado/app/model/AudioPlay.kt index 55539e5fc..6b7277394 100644 --- a/app/src/main/java/io/legado/app/model/AudioPlay.kt +++ b/app/src/main/java/io/legado/app/model/AudioPlay.kt @@ -171,7 +171,7 @@ object AudioPlay { book.getUseReplaceRule() ) } - book.save() + book.update() } } } diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index 2433e793c..e78035694 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -26,10 +26,12 @@ import io.legado.app.utils.stackTraceStr import io.legado.app.utils.toastOnUi import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancelChildren import kotlinx.coroutines.delay +import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch @@ -64,7 +66,7 @@ object ReadBook : CoroutineScope by MainScope() { /* web端阅读进度记录 */ var webBookProgress: BookProgress? = null - var preDownloadTask: Coroutine<*>? = null + var preDownloadTask: Job? = null val downloadedChapters = hashSetOf() val downloadFailChapters = hashMapOf() var contentProcessor: ContentProcessor? = null @@ -169,9 +171,10 @@ object ReadBook : CoroutineScope by MainScope() { fun uploadProgress() { book?.let { - Coroutine.async { + launch(IO) { AppWebDav.uploadBookProgress(it) - it.save() + ensureActive() + it.update() } } } @@ -651,7 +654,7 @@ object ReadBook : CoroutineScope by MainScope() { return@execute } preDownloadTask?.cancel() - preDownloadTask = Coroutine.async(executeContext = IO) { + preDownloadTask = launch(IO) { //预下载 launch { val maxChapterIndex = diff --git a/app/src/main/java/io/legado/app/service/CacheBookService.kt b/app/src/main/java/io/legado/app/service/CacheBookService.kt index d9b234fe5..4916633d8 100644 --- a/app/src/main/java/io/legado/app/service/CacheBookService.kt +++ b/app/src/main/java/io/legado/app/service/CacheBookService.kt @@ -119,7 +119,7 @@ class CacheBookService : BaseService() { WebBook.getChapterListAwait(cacheBook.bookSource, book).onFailure { if (book.totalChapterNum > 0) { book.totalChapterNum = 0 - book.save() + book.update() } val msg = "《$name》目录为空且加载目录失败\n${it.localizedMessage}" AppLog.put(msg, it, true) @@ -127,7 +127,7 @@ class CacheBookService : BaseService() { }.getOrNull()?.let { toc -> appDb.bookChapterDao.insert(*toc.toTypedArray()) } - book.save() + book.update() } } val end2 = if (end < 0) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index a8abffda8..b5b1e0446 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -122,6 +122,7 @@ import io.legado.app.utils.visible import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job import kotlinx.coroutines.delay +import kotlinx.coroutines.ensureActive import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -1439,7 +1440,8 @@ class ReadBookActivity : BaseReadBookActivity(), delay(300000) ReadBook.book?.let { AppWebDav.uploadBookProgress(it) - it.save() + ensureActive() + it.update() Backup.autoBack(this@ReadBookActivity) } }