Horis 2 年 前
親
コミット
6bc74e155a

+ 35 - 0
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<Drawable> {
+
+                    override fun onLoadFailed(
+                        e: GlideException?,
+                        model: Any?,
+                        target: Target<Drawable>,
+                        isFirstResource: Boolean
+                    ): Boolean {
+                        return false
+                    }
+
+                    override fun onResourceReady(
+                        resource: Drawable,
+                        model: Any,
+                        target: Target<Drawable>?,
+                        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)

+ 3 - 1
app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt

@@ -143,7 +143,9 @@ class RssFragment() : VMBaseFragment<RssViewModel>(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))