From 0a2b61427d23e22166af3dfb8772926a492b6e10 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Thu, 10 Apr 2025 11:59:05 +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 --- .../io/legado/app/ui/login/SourceLoginDialog.kt | 4 +++- .../app/ui/rss/article/RssArticlesFragment.kt | 14 ++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt index b01a0f38f..f3d7b7a98 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import androidx.core.view.setPadding import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope +import com.script.rhino.runScriptWithContext import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.constant.AppLog @@ -25,13 +26,13 @@ import io.legado.app.utils.dpToPx import io.legado.app.utils.isAbsUrl import io.legado.app.utils.openUrl import io.legado.app.utils.printOnDebug -import com.script.rhino.runScriptWithContext import io.legado.app.utils.setLayout import io.legado.app.utils.showDialogFragment import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main +import kotlinx.coroutines.ensureActive import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import splitties.views.onClick @@ -133,6 +134,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { } } }.onFailure { e -> + ensureActive() AppLog.put("LoginUI Button ${rowUi.name} JavaScript error", e) } } diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt index 38d7e496c..652694273 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt @@ -5,7 +5,9 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -27,6 +29,7 @@ import io.legado.app.utils.startActivity import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job +import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.launch @@ -95,16 +98,19 @@ class RssArticlesFragment() : VMBaseFragment(R.layout.frag } } }) - refreshLayout.post { - refreshLayout.isRefreshing = true - loadArticles() + viewLifecycleOwner.lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.RESUMED) { + refreshLayout.isRefreshing = true + loadArticles() + this@launch.cancel() + } } } private fun initData() { val rssUrl = activityViewModel.url ?: return articlesFlowJob?.cancel() - articlesFlowJob = lifecycleScope.launch { + articlesFlowJob = viewLifecycleOwner.lifecycleScope.launch { appDb.rssArticleDao.flowByOriginSort(rssUrl, viewModel.sortName).catch { AppLog.put("订阅文章界面获取数据失败\n${it.localizedMessage}", it) }.flowOn(IO).collect {