Horis 1 سال پیش
والد
کامیت
0e2124824f

+ 11 - 0
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.printOnDebug
 import io.legado.app.utils.toRequestBody
 import io.legado.app.utils.toRequestBody
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.ensureActive
 import kotlinx.coroutines.withContext
 import kotlinx.coroutines.withContext
 import okhttp3.Interceptor
 import okhttp3.Interceptor
 import okhttp3.MediaType.Companion.toMediaType
 import okhttp3.MediaType.Companion.toMediaType
@@ -35,6 +36,7 @@ import java.time.LocalDateTime
 import java.time.ZoneOffset
 import java.time.ZoneOffset
 import java.time.format.DateTimeFormatter
 import java.time.format.DateTimeFormatter
 import java.util.concurrent.TimeUnit
 import java.util.concurrent.TimeUnit
+import kotlin.coroutines.coroutineContext
 
 
 @Suppress("unused", "MemberVisibilityCanBePrivate")
 @Suppress("unused", "MemberVisibilityCanBePrivate")
 open class WebDav(
 open class WebDav(
@@ -245,6 +247,8 @@ open class WebDav(
                 val requestBody = EXISTS.toRequestBody("application/xml".toMediaType())
                 val requestBody = EXISTS.toRequestBody("application/xml".toMediaType())
                 method("PROPFIND", requestBody)
                 method("PROPFIND", requestBody)
             }.use { it.isSuccessful }
             }.use { it.isSuccessful }
+        }.onFailure {
+            coroutineContext.ensureActive()
         }.getOrDefault(false)
         }.getOrDefault(false)
     }
     }
 
 
@@ -259,6 +263,8 @@ open class WebDav(
                 val requestBody = EXISTS.toRequestBody("application/xml".toMediaType())
                 val requestBody = EXISTS.toRequestBody("application/xml".toMediaType())
                 method("PROPFIND", requestBody)
                 method("PROPFIND", requestBody)
             }.use { it.code != 401 }
             }.use { it.code != 401 }
+        }.onFailure {
+            coroutineContext.ensureActive()
         }.getOrDefault(true)
         }.getOrDefault(true)
     }
     }
 
 
@@ -279,6 +285,7 @@ open class WebDav(
                 }
                 }
             }
             }
         }.onFailure {
         }.onFailure {
+            coroutineContext.ensureActive()
             AppLog.put("WebDav创建目录失败\n${it.localizedMessage}", it)
             AppLog.put("WebDav创建目录失败\n${it.localizedMessage}", it)
         }.isSuccess
         }.isSuccess
     }
     }
@@ -335,6 +342,7 @@ open class WebDav(
                 }
                 }
             }
             }
         }.onFailure {
         }.onFailure {
+            coroutineContext.ensureActive()
             AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
             AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
             throw WebDavException("WebDav上传失败\n${it.localizedMessage}")
             throw WebDavException("WebDav上传失败\n${it.localizedMessage}")
         }
         }
@@ -355,6 +363,7 @@ open class WebDav(
                 }
                 }
             }
             }
         }.onFailure {
         }.onFailure {
+            coroutineContext.ensureActive()
             AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
             AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
             throw WebDavException("WebDav上传失败\n${it.localizedMessage}")
             throw WebDavException("WebDav上传失败\n${it.localizedMessage}")
         }
         }
@@ -375,6 +384,7 @@ open class WebDav(
                 }
                 }
             }
             }
         }.onFailure {
         }.onFailure {
+            coroutineContext.ensureActive()
             AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
             AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
             throw WebDavException("WebDav上传失败\n${it.localizedMessage}")
             throw WebDavException("WebDav上传失败\n${it.localizedMessage}")
         }
         }
@@ -405,6 +415,7 @@ open class WebDav(
                 checkResult(it)
                 checkResult(it)
             }
             }
         }.onFailure {
         }.onFailure {
+            coroutineContext.ensureActive()
             AppLog.put("WebDav删除失败\n${it.localizedMessage}", it)
             AppLog.put("WebDav删除失败\n${it.localizedMessage}", it)
         }.isSuccess
         }.isSuccess
     }
     }

+ 1 - 0
app/src/main/java/io/legado/app/model/ReadBook.kt

@@ -200,6 +200,7 @@ object ReadBook : CoroutineScope by MainScope() {
         ) {
         ) {
             durChapterIndex = progress.durChapterIndex
             durChapterIndex = progress.durChapterIndex
             durChapterPos = progress.durChapterPos
             durChapterPos = progress.durChapterPos
+            saveRead()
             clearTextChapter()
             clearTextChapter()
             callBack?.upContent()
             callBack?.upContent()
             loadContent(resetPageOffset = true)
             loadContent(resetPageOffset = true)

+ 5 - 0
app/src/main/java/io/legado/app/model/webBook/WebBook.kt

@@ -217,6 +217,7 @@ object WebBook {
                     .evalJS(preUpdateJs)
                     .evalJS(preUpdateJs)
             }
             }
         }.onFailure {
         }.onFailure {
+            coroutineContext.ensureActive()
             AppLog.put("执行preUpdateJs规则失败 书源:${bookSource.bookSourceName}", it)
             AppLog.put("执行preUpdateJs规则失败 书源:${bookSource.bookSourceName}", it)
         }
         }
     }
     }
@@ -264,6 +265,8 @@ object WebBook {
                     body = res.body
                     body = res.body
                 )
                 )
             }
             }
+        }.onFailure {
+            coroutineContext.ensureActive()
         }
         }
     }
     }
 
 
@@ -391,6 +394,8 @@ object WebBook {
                 return@runCatching searchBook.toBook()
                 return@runCatching searchBook.toBook()
             }
             }
             throw NoStackTraceException("未搜索到 $name($author) 书籍")
             throw NoStackTraceException("未搜索到 $name($author) 书籍")
+        }.onFailure {
+            coroutineContext.ensureActive()
         }
         }
     }
     }
 
 

+ 3 - 2
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.toastOnUi
 import io.legado.app.utils.writeToOutputStream
 import io.legado.app.utils.writeToOutputStream
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.ensureActive
 import java.io.File
 import java.io.File
 
 
 
 
@@ -92,8 +93,8 @@ class BookshelfManageViewModel(application: Application) : BaseViewModel(applica
                         AppLog.put("搜索书籍出错\n${it.localizedMessage}", it, true)
                         AppLog.put("搜索书籍出错\n${it.localizedMessage}", it, true)
                     }.getOrNull() ?: return@forEachIndexed
                     }.getOrNull() ?: return@forEachIndexed
                 kotlin.runCatching {
                 kotlin.runCatching {
-                    if (book.tocUrl.isEmpty()) {
-                        WebBook.getBookInfoAwait(source, book)
+                    if (newBook.tocUrl.isEmpty()) {
+                        WebBook.getBookInfoAwait(source, newBook)
                     }
                     }
                 }.onFailure {
                 }.onFailure {
                     AppLog.put("获取书籍详情出错\n${it.localizedMessage}", it, true)
                     AppLog.put("获取书籍详情出错\n${it.localizedMessage}", it, true)

+ 0 - 1
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)
             setMessage(R.string.cloud_progress_exceeds_current)
             okButton {
             okButton {
                 ReadBook.setProgress(progress)
                 ReadBook.setProgress(progress)
-                ReadBook.saveRead()
             }
             }
             noButton()
             noButton()
         }
         }