refactor(coil): Turn "useCustomCover" into an extension method

This commit is contained in:
Ahmad Ansori Palembani 2024-08-21 06:45:19 +07:00
parent b044842475
commit 7564566452
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
6 changed files with 25 additions and 15 deletions

View file

@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.coil
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.core.net.toUri import androidx.core.net.toUri
import co.touchlab.kermit.Logger import co.touchlab.kermit.Logger
import coil3.Extras
import coil3.ImageLoader import coil3.ImageLoader
import coil3.decode.DataSource import coil3.decode.DataSource
import coil3.decode.ImageSource import coil3.decode.ImageSource
@ -11,7 +10,6 @@ import coil3.disk.DiskCache
import coil3.fetch.FetchResult import coil3.fetch.FetchResult
import coil3.fetch.Fetcher import coil3.fetch.Fetcher
import coil3.fetch.SourceFetchResult import coil3.fetch.SourceFetchResult
import coil3.getOrDefault
import coil3.request.Options import coil3.request.Options
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.cache.CoverCache
@ -60,7 +58,7 @@ class MangaCoverFetcher(
private val fileScope = CoroutineScope(Job() + Dispatchers.IO) private val fileScope = CoroutineScope(Job() + Dispatchers.IO)
override suspend fun fetch(): FetchResult { override suspend fun fetch(): FetchResult {
if (options.extras.getOrDefault(USE_CUSTOM_COVER_KEY)) { if (options.useCustomCover) {
val customCoverFile = customCoverFileLazy.value val customCoverFile = customCoverFileLazy.value
if (customCoverFile.exists()) { if (customCoverFile.exists()) {
setRatioAndColorsInScope(mangaId, url, isInLibrary, UniFile.fromFile(customCoverFile)) setRatioAndColorsInScope(mangaId, url, isInLibrary, UniFile.fromFile(customCoverFile))
@ -377,8 +375,6 @@ class MangaCoverFetcher(
} }
companion object { companion object {
val USE_CUSTOM_COVER_KEY = Extras.Key(true)
private val CACHE_CONTROL_FORCE_NETWORK_NO_CACHE = CacheControl.Builder().noCache().noStore().build() private val CACHE_CONTROL_FORCE_NETWORK_NO_CACHE = CacheControl.Builder().noCache().noStore().build()
private val CACHE_CONTROL_NO_NETWORK_NO_CACHE = CacheControl.Builder().noCache().onlyIfCached().build() private val CACHE_CONTROL_NO_NETWORK_NO_CACHE = CacheControl.Builder().noCache().onlyIfCached().build()
} }

View file

@ -42,3 +42,12 @@ val Options.customDecoder: Boolean
get() = getExtra(customDecoderKey) get() = getExtra(customDecoderKey)
private val customDecoderKey = Extras.Key(default = false) private val customDecoderKey = Extras.Key(default = false)
val Options.useCustomCover: Boolean
get() = getExtra(useCustomCoverKey)
fun ImageRequest.Builder.useCustomCover(enable: Boolean) = apply {
extras[useCustomCoverKey] = enable
}
private val useCustomCoverKey = Extras.Key(default = true)

View file

@ -17,7 +17,7 @@ import coil3.load
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup import com.google.android.material.chip.ChipGroup
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher import eu.kanade.tachiyomi.data.coil.useCustomCover
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.seriesType import eu.kanade.tachiyomi.data.database.models.seriesType
import eu.kanade.tachiyomi.databinding.EditMangaDialogBinding import eu.kanade.tachiyomi.databinding.EditMangaDialogBinding
@ -40,7 +40,9 @@ import eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import yokai.domain.manga.models.cover
import yokai.i18n.MR import yokai.i18n.MR
import yokai.presentation.core.util.coil.asTarget
import yokai.presentation.core.util.coil.loadManga import yokai.presentation.core.util.coil.loadManga
import yokai.util.lang.getString import yokai.util.lang.getString
import android.R as AR import android.R as AR
@ -219,10 +221,11 @@ class EditMangaDialog : DialogController {
binding.resetCover.isVisible = !isLocal binding.resetCover.isVisible = !isLocal
binding.resetCover.setOnClickListener { binding.resetCover.setOnClickListener {
binding.mangaCover.load( binding.mangaCover.loadManga(
manga, manga.cover(),
target = binding.mangaCover.asTarget(),
) { ) {
extras[MangaCoverFetcher.USE_CUSTOM_COVER_KEY] = false useCustomCover(false)
} }
customCoverUri = null customCoverUri = null
willResetCover = true willResetCover = true

View file

@ -32,6 +32,7 @@ import coil3.request.placeholder
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.coil.useCustomCover
import eu.kanade.tachiyomi.data.database.models.seriesType import eu.kanade.tachiyomi.data.database.models.seriesType
import eu.kanade.tachiyomi.databinding.ChapterHeaderItemBinding import eu.kanade.tachiyomi.databinding.ChapterHeaderItemBinding
import eu.kanade.tachiyomi.databinding.MangaHeaderItemBinding import eu.kanade.tachiyomi.databinding.MangaHeaderItemBinding
@ -675,6 +676,7 @@ class MangaHeaderHolder(
error(drawable) error(drawable)
if (manga.favorite) networkCachePolicy(CachePolicy.READ_ONLY) if (manga.favorite) networkCachePolicy(CachePolicy.READ_ONLY)
diskCachePolicy(CachePolicy.READ_ONLY) diskCachePolicy(CachePolicy.READ_ONLY)
useCustomCover(manga.favorite)
} }
binding.backdrop.loadManga(manga) { binding.backdrop.loadManga(manga) {
placeholder(drawable) placeholder(drawable)
@ -698,6 +700,7 @@ class MangaHeaderHolder(
applyBlur() applyBlur()
}, },
) )
useCustomCover(manga.favorite)
} }
} }

View file

@ -6,7 +6,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isInvisible import androidx.core.view.isInvisible
import androidx.core.view.isVisible import androidx.core.view.isVisible
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher import eu.kanade.tachiyomi.data.coil.useCustomCover
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.databinding.MangaGridItemBinding import eu.kanade.tachiyomi.databinding.MangaGridItemBinding
import eu.kanade.tachiyomi.databinding.MigrationProcessItemBinding import eu.kanade.tachiyomi.databinding.MigrationProcessItemBinding
@ -17,7 +17,6 @@ import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
import eu.kanade.tachiyomi.ui.library.setFreeformCoverRatio import eu.kanade.tachiyomi.ui.library.setFreeformCoverRatio
import eu.kanade.tachiyomi.ui.manga.MangaDetailsController import eu.kanade.tachiyomi.ui.manga.MangaDetailsController
import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.system.setExtras
import eu.kanade.tachiyomi.util.view.setCards import eu.kanade.tachiyomi.util.view.setCards
import eu.kanade.tachiyomi.util.view.setVectorCompat import eu.kanade.tachiyomi.util.view.setVectorCompat
import eu.kanade.tachiyomi.util.view.withFadeTransaction import eu.kanade.tachiyomi.util.view.withFadeTransaction
@ -148,15 +147,13 @@ class MigrationProcessHolder(
progress.isVisible = false progress.isVisible = false
coverThumbnail.loadManga(manga.cover(), progress) { coverThumbnail.loadManga(manga.cover(), progress) {
setExtras(MangaCoverFetcher.USE_CUSTOM_COVER_KEY, false) useCustomCover(false)
} }
compactTitle.isVisible = true compactTitle.isVisible = true
gradient.isVisible = true gradient.isVisible = true
compactTitle.text = if (manga.title.isBlank()) { compactTitle.text = manga.title.ifBlank {
view.context.getString(MR.strings.unknown) view.context.getString(MR.strings.unknown)
} else {
manga.title
} }
gradient.isVisible = true gradient.isVisible = true

View file

@ -30,6 +30,8 @@ fun ImageView.loadManga(
return imageLoader.enqueue(request) return imageLoader.enqueue(request)
} }
fun ImageView.asTarget() = ImageViewTarget(this)
fun ImageView.loadManga( fun ImageView.loadManga(
cover: MangaCover, cover: MangaCover,
progress: View? = null, progress: View? = null,