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 7062200a1..8fcbab9cb 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCacheKeyFactory.kt @@ -15,6 +15,7 @@ */ package com.hippo.ehviewer.client +import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.data.GalleryPreview import com.hippo.ehviewer.client.data.NormalGalleryPreview @@ -34,11 +35,12 @@ fun getThumbKey(url: String): String { return url.removePrefix(URL_PREFIX_THUMB_E).removePrefix(URL_PREFIX_THUMB_EX).removePrefix("t/") } -fun getUrlByThumbKey(key: String): String = if (EhUtils.isExHentai) URL_PREFIX_THUMB_EX + "t/" + key else URL_PREFIX_THUMB_E + key - val GalleryPreview.url get() = if (this is NormalGalleryPreview) { if (EhUtils.isExHentai) URL_PREFIX_THUMB_EX + imageKey else URL_PREFIX_THUMB_E + imageKey } else { if (EhUtils.isExHentai) URL_PREFIX_THUMB_EX + "t/" + imageKey else URL_PREFIX_THUMB_E + imageKey } + +val GalleryInfo.thumbUrl + get() = if (EhUtils.isExHentai) URL_PREFIX_THUMB_EX + "t/" + thumbKey!! else URL_PREFIX_THUMB_E + thumbKey!! diff --git a/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt b/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt index fe1d8604f..1157b6bb0 100644 --- a/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt +++ b/app/src/main/java/com/hippo/ehviewer/coil/Extensions.kt @@ -9,21 +9,23 @@ import coil.disk.DiskCache import coil.request.CachePolicy import coil.request.ImageRequest import coil.size.Size +import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.data.GalleryPreview -import com.hippo.ehviewer.client.getUrlByThumbKey +import com.hippo.ehviewer.client.thumbUrl import com.hippo.ehviewer.client.url -fun ImageRequest.Builder.ehUrl(key: String) = apply { - data(getUrlByThumbKey(key)) +fun ImageRequest.Builder.ehUrl(info: GalleryInfo) = apply { + val key = info.thumbKey!! + data(info.thumbUrl) memoryCacheKey(key) diskCacheKey(key) size(Size.ORIGINAL) } -fun ImageRequest.Builder.ehPreviewKey(key: GalleryPreview) = apply { - data(key.url) - memoryCacheKey(key.imageKey) - diskCacheKey(key.imageKey) +fun ImageRequest.Builder.ehPreview(preview: GalleryPreview) = apply { + data(preview.url) + memoryCacheKey(preview.imageKey) + diskCacheKey(preview.imageKey) size(Size.ORIGINAL) } @@ -35,6 +37,7 @@ fun ImageRequest.Builder.justDownload() = apply { decoderFactory { _, _, _ -> stubFactory } } -inline fun Context.imageRequest(key: GalleryPreview, builder: ImageRequest.Builder.() -> Unit = {}) = ImageRequest.Builder(this).ehPreviewKey(key).apply(builder).build() -inline fun Context.imageRequest(key: String, builder: ImageRequest.Builder.() -> Unit = {}) = ImageRequest.Builder(this).ehUrl(key).apply(builder).build() +inline fun Context.imageRequest(preview: GalleryPreview, builder: ImageRequest.Builder.() -> Unit = {}) = ImageRequest.Builder(this).ehPreview(preview).apply(builder).build() +inline fun Context.imageRequest(info: GalleryInfo, builder: ImageRequest.Builder.() -> Unit = {}) = ImageRequest.Builder(this).ehUrl(info).apply(builder).build() +inline fun Context.imageRequest(builder: ImageRequest.Builder.() -> Unit = {}) = ImageRequest.Builder(this).apply(builder).build() inline fun diskCache(builder: DiskCache.Builder.() -> Unit) = DiskCache.Builder().apply(builder).build() diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt b/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt index 3b8f5bdc7..13f036d0b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt @@ -39,7 +39,7 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.getUrlByThumbKey +import com.hippo.ehviewer.client.thumbUrl import com.hippo.ehviewer.ui.login.LocalNavController import com.hippo.ehviewer.util.tellClipboardWithToast @@ -83,7 +83,7 @@ fun GalleryInfoBottomSheet( EhUrl.getGalleryDetailUrl(gid, token), title, titleJpn, - getUrlByThumbKey(thumbKey!!), + thumbUrl, EhUtils.getCategory(category), uploader, posted, diff --git a/app/src/main/java/com/hippo/ehviewer/ui/compose/EhAsyncThumb.kt b/app/src/main/java/com/hippo/ehviewer/ui/compose/EhAsyncThumb.kt index 58d83304e..796e36d8d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/compose/EhAsyncThumb.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/compose/EhAsyncThumb.kt @@ -12,17 +12,18 @@ import androidx.compose.ui.platform.LocalContext import coil.compose.AsyncImage import coil.compose.AsyncImagePainter import coil.request.ImageRequest +import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.coil.imageRequest @Composable @ReadOnlyComposable -fun requestOf(model: String): ImageRequest { +fun requestOf(model: GalleryInfo): ImageRequest { return LocalContext.current.imageRequest(model) } @Composable fun EhAsyncThumb( - model: String, + model: GalleryInfo, modifier: Modifier = Modifier, contentScale: ContentScale = ContentScale.Fit, ) = AsyncImage( @@ -34,7 +35,7 @@ fun EhAsyncThumb( @Composable fun EhAsyncCropThumb( - key: String, + key: GalleryInfo, modifier: Modifier = Modifier, ) { var contentScale by remember { mutableStateOf(ContentScale.Fit) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryDetail.kt b/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryDetail.kt index 5e8dd7ddc..41f1dd872 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryDetail.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryDetail.kt @@ -103,7 +103,7 @@ fun GalleryDetailHeaderCard( Row { Card { EhAsyncCropThumb( - key = remember(info.thumbKey!!) { info.thumbKey!! }, + key = remember(info.gid) { info }, modifier = Modifier.height(dimensionResource(id = R.dimen.gallery_detail_thumb_height)).width(dimensionResource(id = R.dimen.gallery_detail_thumb_width)), ) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryInfo.kt b/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryInfo.kt index cd3baa9fc..fb6bcb5cd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryInfo.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/compose/data/GalleryInfo.kt @@ -57,7 +57,7 @@ fun GalleryInfoListItem( Row { Card { EhAsyncCropThumb( - key = info.thumbKey!!, + key = info, modifier = Modifier.aspectRatio(0.6666667F).fillMaxSize(), ) } @@ -141,7 +141,7 @@ fun GalleryInfoGridItem( ) { Box { EhAsyncThumb( - model = info.thumbKey!!, + model = info, modifier = Modifier.aspectRatio(aspect).fillMaxWidth(), contentScale = ContentScale.Crop, ) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/legacy/UnikeryDrawable.kt b/app/src/main/java/com/hippo/ehviewer/ui/legacy/UnikeryDrawable.kt index f6c74fb9f..4824dd43e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/legacy/UnikeryDrawable.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/legacy/UnikeryDrawable.kt @@ -19,6 +19,7 @@ import android.graphics.drawable.AnimatedImageDrawable import android.graphics.drawable.Drawable import coil.imageLoader import coil.request.ImageRequest +import coil.size.Size import com.hippo.ehviewer.coil.imageRequest class UnikeryDrawable(private val mTextView: ObservedTextView, url: String) : @@ -28,8 +29,10 @@ class UnikeryDrawable(private val mTextView: ObservedTextView, url: String) : init { mTextView.setOnWindowAttachListener(this) - mImageRequest = mTextView.context.imageRequest(url) { + mImageRequest = mTextView.context.imageRequest { target(onSuccess = { onGetValue(it) }) + size(Size.ORIGINAL) + data(url) } load() } 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 79518de15..8b7ff6f36 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 @@ -867,10 +867,8 @@ class DownloadsScene : onClick = ::onClick.partially1(binding.thumb), ) { EhAsyncCropThumb( - key = info.thumbKey!!, - modifier = Modifier - .height(height) - .aspectRatio(0.6666667F), + key = info, + modifier = Modifier.height(height).aspectRatio(0.6666667F), ) } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt index 6ff0fbeeb..2beddcbf9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt @@ -1053,7 +1053,7 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H private fun onGetGalleryListSuccess(result: GalleryListParser.Result, taskId: Int) { if (Settings.preloadThumbAggressively) { lifecycleScope.launchIO { - result.galleryInfoList.forEach { context?.run { imageLoader.enqueue(imageRequest(it.thumbKey!!) { justDownload() }) } } + result.galleryInfoList.forEach { context?.run { imageLoader.enqueue(imageRequest(it) { justDownload() }) } } } } if (mHelper != null && mHelper!!.isCurrentTask(taskId)) {