修复校验超时判断

pull/1625/head
kunfei 3 years ago
parent 27a79ab432
commit 120a3a8706
  1. 5
      app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt
  2. 13
      app/src/main/java/io/legado/app/service/CheckSourceService.kt

@ -143,10 +143,11 @@ class Coroutine<T>(
val value = executeBlock(scope, context, timeMillis ?: 0L, block)
ensureActive()
success?.let { dispatchCallback(this, value, it) }
} catch (e: CancellationException) {
Timber.e("任务取消")
} catch (e: Throwable) {
Timber.e(e)
if (e is CancellationException && e !is TimeoutCancellationException) {
return@launch
}
val consume: Boolean = errorReturn?.value?.let { value ->
success?.let { dispatchCallback(this, value, it) }
true

@ -8,11 +8,9 @@ import io.legado.app.constant.AppConst
import io.legado.app.constant.EventBus
import io.legado.app.constant.IntentAction
import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.Book
import io.legado.app.data.entities.SearchBook
import io.legado.app.data.entities.BookSource
import io.legado.app.help.AppConfig
import io.legado.app.help.coroutine.CompositeCoroutine
import io.legado.app.model.*
import io.legado.app.model.webBook.WebBook
import io.legado.app.ui.book.source.manage.BookSourceActivity
@ -23,14 +21,17 @@ import io.legado.app.utils.toastOnUi
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.launch
import java.util.concurrent.Executors
import kotlin.math.min
/**
* 校验书源
*/
class CheckSourceService : BaseService() {
private var threadCount = AppConfig.threadCount
private var searchCoroutine =
Executors.newFixedThreadPool(min(threadCount, AppConst.MAX_THREAD)).asCoroutineDispatcher()
private var tasks = CompositeCoroutine()
private val allIds = ArrayList<String>()
private val checkedIds = ArrayList<String>()
private var processIndex = 0
@ -71,7 +72,6 @@ class CheckSourceService : BaseService() {
override fun onDestroy() {
super.onDestroy()
Debug.finishChecking()
tasks.clear()
searchCoroutine.close()
postEvent(EventBus.CHECK_SOURCE_DONE, 0)
}
@ -81,7 +81,6 @@ class CheckSourceService : BaseService() {
toastOnUi("已有书源在校验,等完成后再试")
return
}
tasks.clear()
allIds.clear()
checkedIds.clear()
allIds.addAll(ids)
@ -102,7 +101,7 @@ class CheckSourceService : BaseService() {
synchronized(this) {
processIndex++
}
execute(context = searchCoroutine) {
launch(IO) {
if (index < allIds.size) {
val sourceUrl = allIds[index]
appDb.bookSourceDao.getBookSource(sourceUrl)?.let { source ->

Loading…
Cancel
Save