From 35cbb1fab8af249e7e9b4b51b1d9be2960c7e39c Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sun, 23 Mar 2025 13:50:13 +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 --- .../java/io/legado/app/model/BookCover.kt | 26 +++++++++++++++---- .../book/manga/recyclerview/MangaAdapter.kt | 11 ++++---- .../app/ui/book/manga/recyclerview/MangaVH.kt | 4 --- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/BookCover.kt b/app/src/main/java/io/legado/app/model/BookCover.kt index f4a26a87d..c415d6a46 100644 --- a/app/src/main/java/io/legado/app/model/BookCover.kt +++ b/app/src/main/java/io/legado/app/model/BookCover.kt @@ -5,6 +5,7 @@ import android.content.Context import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import androidx.annotation.Keep +import com.bumptech.glide.Glide import com.bumptech.glide.RequestBuilder import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.resource.bitmap.CenterCrop @@ -29,6 +30,7 @@ import io.legado.app.utils.fromJsonObject import io.legado.app.utils.getPrefBoolean import io.legado.app.utils.getPrefString import splitties.init.appCtx +import java.io.File @Keep object BookCover { @@ -102,20 +104,34 @@ object BookCover { path: String?, loadOnlyWifi: Boolean = false, sourceOrigin: String? = null, - manga: Boolean = false, - useDefaultCover: Drawable? = null, ): RequestBuilder { var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi) - .set(OkHttpModelLoader.mangaOption, manga) + .set(OkHttpModelLoader.mangaOption, true) if (sourceOrigin != null) { options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin) } return ImageLoader.load(context, path) .apply(options) .override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL) - .placeholder(useDefaultCover) - .error(useDefaultCover) .diskCacheStrategy(DiskCacheStrategy.ALL) + .skipMemoryCache(true) + } + + fun preloadManga( + context: Context, + path: String?, + loadOnlyWifi: Boolean = false, + sourceOrigin: String? = null, + ): RequestBuilder { + var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi) + .set(OkHttpModelLoader.mangaOption, true) + if (sourceOrigin != null) { + options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin) + } + return Glide.with(context) + .downloadOnly() + .apply(options) + .load(path) } /** diff --git a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt index b11e59673..f84fe2051 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt @@ -17,18 +17,17 @@ import androidx.viewbinding.ViewBinding import com.bumptech.glide.Glide import com.bumptech.glide.ListPreloader.PreloadModelProvider import com.bumptech.glide.RequestBuilder -import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW import io.legado.app.databinding.BookComicLoadingRvBinding import io.legado.app.databinding.BookComicRvBinding import io.legado.app.help.glide.progress.ProgressManager +import io.legado.app.help.globalExecutor import io.legado.app.model.BookCover import io.legado.app.model.ReadManga import io.legado.app.ui.book.manga.config.MangaColorFilterConfig import io.legado.app.ui.book.manga.entities.MangaPage import io.legado.app.ui.book.manga.entities.ReaderLoading -import io.legado.app.utils.getCompatDrawable class MangaAdapter(private val context: Context) : @@ -171,7 +170,9 @@ class MangaAdapter(private val context: Context) : vh.itemView.updateLayoutParams { height = MATCH_PARENT } - Glide.with(context).clear(vh.binding.image) + globalExecutor.execute { + Glide.with(context).clear(vh.binding.image) + } if (vh.binding.image.tag is String) { ProgressManager.removeListener(vh.binding.image.tag as String) } @@ -223,12 +224,10 @@ class MangaAdapter(private val context: Context) : override fun getPreloadRequestBuilder(item: Any): RequestBuilder<*>? { if (item is MangaPage) { - return BookCover.loadManga( + return BookCover.preloadManga( context, item.mImageUrl, sourceOrigin = ReadManga.book?.origin, - manga = true, - useDefaultCover = context.getCompatDrawable(R.color.book_ant_10) ) } return null diff --git a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaVH.kt b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaVH.kt index 0e67b865c..66df6d31c 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaVH.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaVH.kt @@ -19,11 +19,9 @@ import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target -import io.legado.app.R import io.legado.app.help.glide.progress.ProgressManager import io.legado.app.model.BookCover import io.legado.app.model.ReadManga -import io.legado.app.utils.getCompatDrawable import io.legado.app.utils.printOnDebug open class MangaVH(val binding: VB, private val context: Context) : @@ -66,8 +64,6 @@ open class MangaVH(val binding: VB, private val context: Conte context, imageUrl, sourceOrigin = ReadManga.book?.origin, - manga = true, - useDefaultCover = context.getCompatDrawable(R.color.book_ant_10) ).addListener(object : RequestListener { override fun onLoadFailed( e: GlideException?,