This commit is contained in:
Horis
2025-03-23 13:50:13 +08:00
parent f71a47ef76
commit f794e692fc
3 changed files with 26 additions and 15 deletions
@@ -5,6 +5,7 @@ import android.content.Context
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.annotation.Keep import androidx.annotation.Keep
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder import com.bumptech.glide.RequestBuilder
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.bitmap.CenterCrop 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.getPrefBoolean
import io.legado.app.utils.getPrefString import io.legado.app.utils.getPrefString
import splitties.init.appCtx import splitties.init.appCtx
import java.io.File
@Keep @Keep
object BookCover { object BookCover {
@@ -102,20 +104,34 @@ object BookCover {
path: String?, path: String?,
loadOnlyWifi: Boolean = false, loadOnlyWifi: Boolean = false,
sourceOrigin: String? = null, sourceOrigin: String? = null,
manga: Boolean = false,
useDefaultCover: Drawable? = null,
): RequestBuilder<Drawable> { ): RequestBuilder<Drawable> {
var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi) var options = RequestOptions().set(OkHttpModelLoader.loadOnlyWifiOption, loadOnlyWifi)
.set(OkHttpModelLoader.mangaOption, manga) .set(OkHttpModelLoader.mangaOption, true)
if (sourceOrigin != null) { if (sourceOrigin != null) {
options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin) options = options.set(OkHttpModelLoader.sourceOriginOption, sourceOrigin)
} }
return ImageLoader.load(context, path) return ImageLoader.load(context, path)
.apply(options) .apply(options)
.override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL) .override(context.resources.displayMetrics.widthPixels, SIZE_ORIGINAL)
.placeholder(useDefaultCover)
.error(useDefaultCover)
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.skipMemoryCache(true)
}
fun preloadManga(
context: Context,
path: String?,
loadOnlyWifi: Boolean = false,
sourceOrigin: String? = null,
): RequestBuilder<File?> {
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)
} }
/** /**
@@ -17,18 +17,17 @@ import androidx.viewbinding.ViewBinding
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.ListPreloader.PreloadModelProvider import com.bumptech.glide.ListPreloader.PreloadModelProvider
import com.bumptech.glide.RequestBuilder import com.bumptech.glide.RequestBuilder
import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW
import io.legado.app.databinding.BookComicLoadingRvBinding import io.legado.app.databinding.BookComicLoadingRvBinding
import io.legado.app.databinding.BookComicRvBinding import io.legado.app.databinding.BookComicRvBinding
import io.legado.app.help.glide.progress.ProgressManager 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.BookCover
import io.legado.app.model.ReadManga import io.legado.app.model.ReadManga
import io.legado.app.ui.book.manga.config.MangaColorFilterConfig 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.MangaPage
import io.legado.app.ui.book.manga.entities.ReaderLoading import io.legado.app.ui.book.manga.entities.ReaderLoading
import io.legado.app.utils.getCompatDrawable
class MangaAdapter(private val context: Context) : class MangaAdapter(private val context: Context) :
@@ -171,7 +170,9 @@ class MangaAdapter(private val context: Context) :
vh.itemView.updateLayoutParams<ViewGroup.LayoutParams> { vh.itemView.updateLayoutParams<ViewGroup.LayoutParams> {
height = MATCH_PARENT 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) { if (vh.binding.image.tag is String) {
ProgressManager.removeListener(vh.binding.image.tag as 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<*>? { override fun getPreloadRequestBuilder(item: Any): RequestBuilder<*>? {
if (item is MangaPage) { if (item is MangaPage) {
return BookCover.loadManga( return BookCover.preloadManga(
context, context,
item.mImageUrl, item.mImageUrl,
sourceOrigin = ReadManga.book?.origin, sourceOrigin = ReadManga.book?.origin,
manga = true,
useDefaultCover = context.getCompatDrawable(R.color.book_ant_10)
) )
} }
return null return null
@@ -19,11 +19,9 @@ import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import io.legado.app.R
import io.legado.app.help.glide.progress.ProgressManager import io.legado.app.help.glide.progress.ProgressManager
import io.legado.app.model.BookCover import io.legado.app.model.BookCover
import io.legado.app.model.ReadManga import io.legado.app.model.ReadManga
import io.legado.app.utils.getCompatDrawable
import io.legado.app.utils.printOnDebug import io.legado.app.utils.printOnDebug
open class MangaVH<VB : ViewBinding>(val binding: VB, private val context: Context) : open class MangaVH<VB : ViewBinding>(val binding: VB, private val context: Context) :
@@ -66,8 +64,6 @@ open class MangaVH<VB : ViewBinding>(val binding: VB, private val context: Conte
context, context,
imageUrl, imageUrl,
sourceOrigin = ReadManga.book?.origin, sourceOrigin = ReadManga.book?.origin,
manga = true,
useDefaultCover = context.getCompatDrawable(R.color.book_ant_10)
).addListener(object : RequestListener<Drawable> { ).addListener(object : RequestListener<Drawable> {
override fun onLoadFailed( override fun onLoadFailed(
e: GlideException?, e: GlideException?,