diff --git a/app/src/main/java/io/legado/app/ui/main/rss/RssAdapter.kt b/app/src/main/java/io/legado/app/ui/main/rss/RssAdapter.kt index 256683122..7866fed0a 100644 --- a/app/src/main/java/io/legado/app/ui/main/rss/RssAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/rss/RssAdapter.kt @@ -1,11 +1,17 @@ package io.legado.app.ui.main.rss import android.content.Context +import android.graphics.drawable.Drawable import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu import androidx.lifecycle.Lifecycle +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.load.resource.gif.GifDrawable +import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.Target import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.RecyclerAdapter @@ -33,6 +39,35 @@ class RssAdapter(context: Context, val callBack: CallBack, val lifecycle: Lifecy val options = RequestOptions() .set(OkHttpModelLoader.sourceOriginOption, item.sourceUrl) ImageLoader.load(lifecycle, item.sourceIcon) + .listener(object : RequestListener { + + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + return false + } + + override fun onResourceReady( + resource: Drawable, + model: Any, + target: Target?, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + if (resource is GifDrawable + && !lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED) + ) { + ivIcon.post { + resource.stop() + } + } + return false + } + + }) .apply(options) .centerCrop() .placeholder(R.drawable.image_rss) diff --git a/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt b/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt index 8cdd9796c..a10997db3 100644 --- a/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt @@ -143,7 +143,9 @@ class RssFragment() : VMBaseFragment(R.layout.fragment_rss), private fun initGroupData() { groupsFlowJob?.cancel() groupsFlowJob = lifecycleScope.launch { - appDb.rssSourceDao.flowGroupEnabled().conflate().collect { + appDb.rssSourceDao.flowGroupEnabled().catch { + AppLog.put("订阅界面获取分组数据失败\n${it.localizedMessage}", it) + }.flowOn(IO).conflate().collect { groups.clear() it.map { group -> groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex))