diff --git a/app/src/main/java/io/legado/app/lib/dialogs/AndroidAlertBuilder.kt b/app/src/main/java/io/legado/app/lib/dialogs/AndroidAlertBuilder.kt index 097726c2d..0998ce5d5 100644 --- a/app/src/main/java/io/legado/app/lib/dialogs/AndroidAlertBuilder.kt +++ b/app/src/main/java/io/legado/app/lib/dialogs/AndroidAlertBuilder.kt @@ -142,7 +142,7 @@ internal class AndroidAlertBuilder(override val ctx: Context) : AlertBuilder curChapterLoadingLock.withLock { withContext(Main) { + ensureActive() curTextChapter = textChapter } callBack?.upMenuView() @@ -744,6 +745,7 @@ object ReadBook : CoroutineScope by MainScope() { -1 -> prevChapterLoadingLock.withLock { withContext(Main) { + ensureActive() prevTextChapter = textChapter } textChapter.layoutChannel.receiveAsFlow().collect() @@ -752,6 +754,7 @@ object ReadBook : CoroutineScope by MainScope() { 1 -> nextChapterLoadingLock.withLock { withContext(Main) { + ensureActive() nextTextChapter = textChapter } for (page in textChapter.layoutChannel) { diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt index 31268a916..c83be1357 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt @@ -172,7 +172,7 @@ class CacheActivity : VMBaseActivity() when (item.itemId) { R.id.menu_download, R.id.menu_download_after -> { - if (!CacheBook.isRun) { + if (!CacheBook.isRun) sureCacheBook { adapter.getItems().forEach { book -> CacheBook.start( this@CacheActivity, @@ -187,7 +187,7 @@ class CacheActivity : VMBaseActivity() } R.id.menu_download_all -> { - if (!CacheBook.isRun) { + if (!CacheBook.isRun) sureCacheBook { adapter.getItems().forEach { book -> CacheBook.start( this@CacheActivity, @@ -555,6 +555,16 @@ class CacheActivity : VMBaseActivity() } } + private fun sureCacheBook(action: () -> Unit) { + alert(R.string.draw) { + setMessage(R.string.sure_cache_book) + noButton() + yesButton { + action.invoke() + } + } + } + override val cacheChapters: HashMap> get() = viewModel.cacheChapters 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 b7ac2e888..16d833abd 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 @@ -29,7 +29,9 @@ import io.legado.app.utils.onEachParallel import io.legado.app.utils.postEvent import kotlinx.coroutines.Job import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.delay +import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow @@ -175,6 +177,7 @@ class MainViewModel(application: Application) : BaseViewModel(application) { ReadBook.onChapterListUpdated(book) addDownload(source, book) }.onFailure { + currentCoroutineContext().ensureActive() AppLog.put("${book.name} 更新目录失败\n${it.localizedMessage}", it) //这里可能因为时间太长书籍信息已经更改,所以重新获取 appDb.bookDao.getBook(book.bookUrl)?.let { book -> diff --git a/app/src/main/java/io/legado/app/ui/widget/recycler/LoadMoreView.kt b/app/src/main/java/io/legado/app/ui/widget/recycler/LoadMoreView.kt index 66b9ed525..5ad794cd8 100644 --- a/app/src/main/java/io/legado/app/ui/widget/recycler/LoadMoreView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/recycler/LoadMoreView.kt @@ -3,7 +3,7 @@ package io.legado.app.ui.widget.recycler import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater -import android.view.ViewGroup +import android.view.View import android.widget.FrameLayout import androidx.annotation.ColorRes import io.legado.app.R @@ -28,7 +28,7 @@ class LoadMoreView(context: Context, attrs: AttributeSet? = null) : FrameLayout( init { super.setOnClickListener { - if (!showErrorDialog()) { + if (!showErrorDialog(it)) { onClickListener?.onClick(it) } } @@ -40,7 +40,7 @@ class LoadMoreView(context: Context, attrs: AttributeSet? = null) : FrameLayout( override fun onAttachedToWindow() { super.onAttachedToWindow() - layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT + layoutParams.width = LayoutParams.MATCH_PARENT } fun startLoad() { @@ -89,12 +89,17 @@ class LoadMoreView(context: Context, attrs: AttributeSet? = null) : FrameLayout( binding.tvText.setTextColor(context.getCompatColor(color)) } - private fun showErrorDialog(): Boolean { + private fun showErrorDialog(view: View): Boolean { if (errorMsg.isBlank()) { return false } context.alert(R.string.error) { setMessage(errorMsg) + if (onClickListener != null) { + neutralButton(R.string.retry) { + onClickListener?.onClick(view) + } + } } return true } diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 04b54360c..533315f27 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1221,4 +1221,5 @@ 阈值 禁用水平滚动动画 开启图片灰色 + 是否确认开始缓存? diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 8fd39181e..199913f2d 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1224,4 +1224,5 @@ 阈值 禁用水平滚动动画 开启图片灰色 + 是否确认开始缓存? diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b585474b1..680383f23 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1224,4 +1224,5 @@ 阈值 禁用水平滚动动画 开启图片灰色 + 是否确认开始缓存? diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7abe823f5..9e1aa38bf 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1215,4 +1215,5 @@ Tắt hoạt ảnh cuộn ngang Bật ảnh xám Chế độ phát + 是否确认开始缓存? diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 35692e68f..418aa351c 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1219,4 +1219,5 @@ 阈值 禁用水平滚动动画 开启图片灰色 + 是否确认开始缓存? diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3ece125b2..c5d96b822 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1220,4 +1220,5 @@ 阈值 禁用水平滚动动画 开启图片灰色 + 是否确认开始缓存? diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 42575e6d1..1c40c1b24 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1226,4 +1226,5 @@ 阈值 禁用水平滚动动画 开启图片灰色 + 是否确认开始缓存? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f042cbafa..0b27b8dbc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1228,4 +1228,5 @@ 禁用水平滚动动画 开启图片灰色 播放模式 + 是否确认开始缓存?