diff --git a/app/src/main/java/com/hippo/drawable/UnikeryDrawable.kt b/app/src/main/java/com/hippo/drawable/UnikeryDrawable.kt index 1508b934f..7f105a4e7 100644 --- a/app/src/main/java/com/hippo/drawable/UnikeryDrawable.kt +++ b/app/src/main/java/com/hippo/drawable/UnikeryDrawable.kt @@ -17,41 +17,33 @@ package com.hippo.drawable import android.graphics.drawable.AnimatedImageDrawable import android.graphics.drawable.Drawable -import coil.Coil.imageLoader -import coil.request.Disposable +import coil.imageLoader import coil.request.ImageRequest +import com.hippo.ehviewer.coil.imageRequest import com.hippo.widget.ObservedTextView -class UnikeryDrawable(private val mTextView: ObservedTextView) : WrapDrawable(), +class UnikeryDrawable(private val mTextView: ObservedTextView, url: String) : WrapDrawable(), ObservedTextView.OnWindowAttachListener { - private var mUrl: String? = null - private var task: Disposable? = null + private val mImageRequest: ImageRequest init { mTextView.setOnWindowAttachListener(this) + mImageRequest = mTextView.context.imageRequest(url) { + target(onSuccess = { onGetValue(it) }) + } + load() } override fun onAttachedToWindow() { - load(mUrl) + drawable ?: load() } override fun onDetachedFromWindow() { - if (task != null && !task!!.isDisposed) task!!.dispose() clearDrawable() } - fun load(url: String?) { - if (url != null) { - mUrl = url - val imageLoader = imageLoader(mTextView.context) - val request = ImageRequest.Builder(mTextView.context) - .data(url) - .memoryCacheKey(url) - .diskCacheKey(url) - .target(onSuccess = { onGetValue(it) }) - .build() - task = imageLoader.enqueue(request) - } + fun load() { + mTextView.context.imageLoader.enqueue(mImageRequest) } private fun clearDrawable() { diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.kt b/app/src/main/java/com/hippo/ehviewer/Settings.kt index 5a190038b..661893afa 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/java/com/hippo/ehviewer/Settings.kt @@ -90,7 +90,7 @@ object Settings { const val KEY_SECURITY = "require_unlock" const val KEY_SECURITY_DELAY = "require_unlock_delay" const val KEY_READ_CACHE_SIZE = "read_cache_size" - const val DEFAULT_READ_CACHE_SIZE = 320 + const val DEFAULT_READ_CACHE_SIZE = 640 const val KEY_BUILT_IN_HOSTS = "built_in_hosts_2" const val KEY_DOMAIN_FRONTING = "domain_fronting" const val KEY_BYPASS_VPN = "bypass_vpn" diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.kt b/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.kt index 1dd933f2b..5c99f5312 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.kt @@ -19,4 +19,8 @@ object EhCacheKeyFactory { fun getImageKey(gid: Long, index: Int): String { return "image:$gid:$index" } + + fun getImageKey(url: String): String { + return url.removePrefix(EhUrl.URL_PREFIX_THUMB_E).removePrefix(EhUrl.URL_PREFIX_THUMB_EX) + } } \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt index a0933e477..878f451c8 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt @@ -127,6 +127,13 @@ object EhUrl { else -> URL_WATCHED_E } + val thumbUrlPrefix: String + get() = when (Settings.gallerySite) { + SITE_E -> URL_PREFIX_THUMB_E + SITE_EX -> URL_PREFIX_THUMB_EX + else -> URL_PREFIX_THUMB_E + } + fun getGalleryDetailUrl(gid: Long, token: String?): String { return getGalleryDetailUrl(gid, token, 0, false) } @@ -165,12 +172,4 @@ object EhUrl { fun getTagDefinitionUrl(tag: String): String { return "https://ehwiki.org/wiki/" + tag.replace(' ', '_') } - - fun getThumbUrlPrefix(): String { - return when (Settings.gallerySite) { - SITE_E -> URL_PREFIX_THUMB_E - SITE_EX -> URL_PREFIX_THUMB_EX - else -> URL_PREFIX_THUMB_E - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt index be763fca4..ccc728117 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt @@ -146,11 +146,6 @@ object EhUtils { return title.ifEmpty { null } } - fun fixThumbUrl(url: String): String { - return EhUrl.getThumbUrlPrefix() + - url.removePrefix(EhUrl.URL_PREFIX_THUMB_E).removePrefix(EhUrl.URL_PREFIX_THUMB_EX) - } - @JvmStatic fun handleThumbUrlResolution(url: String?): String? { if (null == url) { diff --git a/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt b/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt new file mode 100644 index 000000000..d8fa79ae5 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt @@ -0,0 +1,24 @@ +package com.hippo.ehviewer.coil + +import android.content.Context +import coil.request.ImageRequest +import com.hippo.ehviewer.client.EhCacheKeyFactory +import com.hippo.ehviewer.client.EhUrl + +fun ImageRequest.Builder.ehUrl(url: String) = apply { + val key = EhCacheKeyFactory.getImageKey(url) + val realUrl = EhUrl.thumbUrlPrefix + key + data(realUrl) + memoryCacheKey(key) + diskCacheKey(key) +} + +inline fun Context.imageRequest( + url: String, + builder: ImageRequest.Builder.() -> Unit = {} +): ImageRequest { + return ImageRequest.Builder(this) + .ehUrl(url) + .apply(builder) + .build() +} \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index e7b5e4f7f..231766606 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -846,9 +846,7 @@ class DownloadsScene : BaseToolbarScene(), DownloadInfoListener, OnClickFabListe } fun bind(info: DownloadInfo) { - info.thumb?.let { - binding.thumb.load(EhUtils.fixThumbUrl(it)) - } + info.thumb?.let { binding.thumb.load(it) } binding.title.text = EhUtils.getSuitableTitle(info) binding.uploader.text = info.uploader binding.rating.rating = info.rating diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt index dd9244f8f..6ae646a4f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.kt @@ -26,9 +26,7 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.hippo.easyrecyclerview.MarginItemDecoration import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryInfo -import com.hippo.ehviewer.dao.LocalFavoriteInfo import com.hippo.ehviewer.databinding.ItemGalleryGridBinding import com.hippo.ehviewer.databinding.ItemGalleryListBinding import com.hippo.widget.recyclerview.AutoStaggeredGridLayoutManager @@ -154,9 +152,6 @@ internal abstract class GalleryAdapter( override fun onBindViewHolder(holder: GalleryHolder, position: Int) { val gi = getDataAt(position) ?: return - if (gi is LocalFavoriteInfo) { - gi.thumb = EhUtils.fixThumbUrl(gi.thumb!!) - } holder.bind(gi) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt index d461c32e4..05f81355e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/widget/GalleryInfoCard.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -30,6 +31,7 @@ import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryInfo +import com.hippo.ehviewer.coil.imageRequest import com.hippo.ehviewer.download.DownloadManager import eu.kanade.tachiyomi.util.system.pxToDp import java.util.Locale @@ -58,7 +60,9 @@ fun ListInfoCard( ) { Card { AsyncImage( - model = info.thumb, + model = info.thumb?.let { + LocalContext.current.imageRequest(it) + }, contentDescription = "", contentScale = ContentScale.Crop, modifier = Modifier diff --git a/app/src/main/java/com/hippo/text/URLImageGetter.kt b/app/src/main/java/com/hippo/text/URLImageGetter.kt index 125ff4fa1..4e2b3888b 100644 --- a/app/src/main/java/com/hippo/text/URLImageGetter.kt +++ b/app/src/main/java/com/hippo/text/URLImageGetter.kt @@ -24,6 +24,6 @@ class URLImageGetter( private val mTextView: ObservedTextView, ) : ImageGetter { override fun getDrawable(source: String): Drawable { - return UnikeryDrawable(mTextView).apply { load(source) } + return UnikeryDrawable(mTextView, source) } } \ No newline at end of file diff --git a/app/src/main/java/com/hippo/widget/LoadImageView.kt b/app/src/main/java/com/hippo/widget/LoadImageView.kt index 5939a60a9..71f5704c1 100644 --- a/app/src/main/java/com/hippo/widget/LoadImageView.kt +++ b/app/src/main/java/com/hippo/widget/LoadImageView.kt @@ -27,6 +27,7 @@ import coil.size.Size import com.hippo.drawable.PreciselyClipDrawable import com.hippo.ehviewer.EhApplication import com.hippo.ehviewer.R +import com.hippo.ehviewer.coil.ehUrl private val application = EhApplication.application private val errorDrawable = AppCompatResources.getDrawable(application, R.drawable.image_failed) @@ -91,6 +92,7 @@ open class LoadImageView @JvmOverloads constructor( }, { _, _ -> setRetry(false) } ) + ehUrl(url) } }