From 2d4805007f1d867dc4263d8d8f505742ca2d3913 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sat, 10 May 2025 11:05:00 +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/lib/webdav/WebDav.kt | 11 +++++++++++ app/src/main/java/io/legado/app/model/ReadBook.kt | 1 + .../main/java/io/legado/app/model/webBook/WebBook.kt | 5 +++++ .../app/ui/book/manage/BookshelfManageViewModel.kt | 5 +++-- .../io/legado/app/ui/book/read/ReadBookActivity.kt | 1 - 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt index 95555b01a..bd9e338fc 100644 --- a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt +++ b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt @@ -16,6 +16,7 @@ import io.legado.app.utils.findNSPrefix import io.legado.app.utils.printOnDebug import io.legado.app.utils.toRequestBody import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.ensureActive import kotlinx.coroutines.withContext import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType @@ -35,6 +36,7 @@ import java.time.LocalDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter import java.util.concurrent.TimeUnit +import kotlin.coroutines.coroutineContext @Suppress("unused", "MemberVisibilityCanBePrivate") open class WebDav( @@ -245,6 +247,8 @@ open class WebDav( val requestBody = EXISTS.toRequestBody("application/xml".toMediaType()) method("PROPFIND", requestBody) }.use { it.isSuccessful } + }.onFailure { + coroutineContext.ensureActive() }.getOrDefault(false) } @@ -259,6 +263,8 @@ open class WebDav( val requestBody = EXISTS.toRequestBody("application/xml".toMediaType()) method("PROPFIND", requestBody) }.use { it.code != 401 } + }.onFailure { + coroutineContext.ensureActive() }.getOrDefault(true) } @@ -279,6 +285,7 @@ open class WebDav( } } }.onFailure { + coroutineContext.ensureActive() AppLog.put("WebDav创建目录失败\n${it.localizedMessage}", it) }.isSuccess } @@ -335,6 +342,7 @@ open class WebDav( } } }.onFailure { + coroutineContext.ensureActive() AppLog.put("WebDav上传失败\n${it.localizedMessage}", it) throw WebDavException("WebDav上传失败\n${it.localizedMessage}") } @@ -355,6 +363,7 @@ open class WebDav( } } }.onFailure { + coroutineContext.ensureActive() AppLog.put("WebDav上传失败\n${it.localizedMessage}", it) throw WebDavException("WebDav上传失败\n${it.localizedMessage}") } @@ -375,6 +384,7 @@ open class WebDav( } } }.onFailure { + coroutineContext.ensureActive() AppLog.put("WebDav上传失败\n${it.localizedMessage}", it) throw WebDavException("WebDav上传失败\n${it.localizedMessage}") } @@ -405,6 +415,7 @@ open class WebDav( checkResult(it) } }.onFailure { + coroutineContext.ensureActive() AppLog.put("WebDav删除失败\n${it.localizedMessage}", it) }.isSuccess } 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 098c27b28..06cd93f7f 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -200,6 +200,7 @@ object ReadBook : CoroutineScope by MainScope() { ) { durChapterIndex = progress.durChapterIndex durChapterPos = progress.durChapterPos + saveRead() clearTextChapter() callBack?.upContent() loadContent(resetPageOffset = true) diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index cc071e7d9..1d9d39319 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -217,6 +217,7 @@ object WebBook { .evalJS(preUpdateJs) } }.onFailure { + coroutineContext.ensureActive() AppLog.put("执行preUpdateJs规则失败 书源:${bookSource.bookSourceName}", it) } } @@ -264,6 +265,8 @@ object WebBook { body = res.body ) } + }.onFailure { + coroutineContext.ensureActive() } } @@ -391,6 +394,8 @@ object WebBook { return@runCatching searchBook.toBook() } throw NoStackTraceException("未搜索到 $name($author) 书籍") + }.onFailure { + coroutineContext.ensureActive() } } diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt index 8a8c79cb9..bbdeceab0 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageViewModel.kt @@ -22,6 +22,7 @@ import io.legado.app.utils.stackTraceStr import io.legado.app.utils.toastOnUi import io.legado.app.utils.writeToOutputStream import kotlinx.coroutines.delay +import kotlinx.coroutines.ensureActive import java.io.File @@ -92,8 +93,8 @@ class BookshelfManageViewModel(application: Application) : BaseViewModel(applica AppLog.put("搜索书籍出错\n${it.localizedMessage}", it, true) }.getOrNull() ?: return@forEachIndexed kotlin.runCatching { - if (book.tocUrl.isEmpty()) { - WebBook.getBookInfoAwait(source, book) + if (newBook.tocUrl.isEmpty()) { + WebBook.getBookInfoAwait(source, newBook) } }.onFailure { AppLog.put("获取书籍详情出错\n${it.localizedMessage}", it, true) 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 25145556f..d3da4effd 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 @@ -1557,7 +1557,6 @@ class ReadBookActivity : BaseReadBookActivity(), setMessage(R.string.cloud_progress_exceeds_current) okButton { ReadBook.setProgress(progress) - ReadBook.saveRead() } noButton() }