Make EhAsyncThumb receive a GalleryInfo

This commit is contained in:
tarsin committed 2023-05-17 11:24:28 +08:00
1 parent 95478a615e
commit b50185639e
9 files changed
+32 -25

No files matched your search

@@ -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!!
@@ -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()
@@ -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,
@@ -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) }
@@ -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)),
)
}
@@ -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,
)
@@ -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()
}
@@ -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),
)
}
}
@@ -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)) {