diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt index 68cde4318..56a5f76f3 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt @@ -196,7 +196,7 @@ class EhApplication : Application(), SingletonImageLoader.Factory { add(GifDecoder.Factory()) } } - diskCache { imageCache } + diskCache { thumbCache } crossfade(300) val drawable = AppCompatResources.getDrawable(appCtx, R.drawable.image_failed) if (drawable != null) error(drawable.asImage(true)) @@ -238,10 +238,10 @@ class EhApplication : Application(), SingletonImageLoader.Factory { } } - val imageCache by lazy { + val thumbCache by lazy { diskCache { - directory(appCtx.cacheDir.toOkioPath() / "image_cache") - maxSizeBytes(Settings.readCacheSize.value.coerceIn(320, 5120).toLong() * 1024 * 1024) + directory(appCtx.cacheDir.toOkioPath() / "thumb") + maxSizeBytes(80L * 1024 * 1024) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt b/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt index 5c85127ee..fd430e3f5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/coil/DownloadThumbInterceptor.kt @@ -12,7 +12,7 @@ import com.ehviewer.core.files.isDirectory import com.ehviewer.core.files.isFile import com.ehviewer.core.files.sendTo import com.ehviewer.core.files.toUri -import com.hippo.ehviewer.EhApplication.Companion.imageCache +import com.hippo.ehviewer.EhApplication.Companion.thumbCache import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.client.getThumbKey import com.hippo.ehviewer.download.downloadLocation @@ -53,7 +53,7 @@ object DownloadThumbInterceptor : Interceptor { // Accessing the recreated file immediately after deleting it throws // FileNotFoundException, so we just overwrite the existing file. val key = requireNotNull(chain.request.memoryCacheKey) - imageCache.read(key) { + thumbCache.read(key) { data sendTo thumb } if (thumb != v1Thumb) v1Thumb.delete() diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt index 8223aa5de..d61a2bab5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderDen.kt @@ -33,7 +33,6 @@ import com.ehviewer.core.files.sendTo import com.ehviewer.core.model.GalleryDetail import com.ehviewer.core.model.GalleryInfo import com.ehviewer.core.util.logcat -import com.hippo.ehviewer.EhApplication.Companion.imageCache as sCache import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine @@ -47,6 +46,7 @@ import com.hippo.ehviewer.download.downloadLocation import com.hippo.ehviewer.download.tempDownloadDir import com.hippo.ehviewer.image.PathSource import com.hippo.ehviewer.jni.archiveFdBatch +import com.hippo.ehviewer.ktbuilder.diskCache import com.hippo.ehviewer.util.FileUtils import com.hippo.ehviewer.util.copyTo import com.hippo.ehviewer.util.sha1 @@ -57,6 +57,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock import kotlin.concurrent.read import kotlin.concurrent.write import okio.Path +import okio.Path.Companion.toOkioPath +import splitties.init.appCtx class SpiderDen(val info: GalleryInfo) { private val gid = info.gid @@ -151,6 +153,10 @@ class SpiderDen(val info: GalleryInfo) { removeTempFile(index) } + fun clearCache() { + repeat(info.pages, ::removeFromCache) + } + private fun Path.findDownloadFileForIndex(index: Int, extension: String) = with(lock) { val name = perFilename(index, extension) read { fileCache[name] } ?: resolve(name).also { write { fileCache[name] = it } } @@ -342,6 +348,12 @@ class SpiderDen(val info: GalleryInfo) { } } +private val sCache by lazy { + diskCache { + directory(appCtx.cacheDir.toOkioPath() / "image_cache") + maxSizeBytes(Settings.readCacheSize.value.coerceIn(320, 5120).toLong() * 1024 * 1024) + } +} private const val TEMP_SUFFIX = ".tmp" private val FileNameRegex = Regex("^\\d{8}\\.\\w{3,4}") private val FileHashRegex = Regex("/h/([0-9a-f]{40})") diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt index 0fca82341..f5ef12b4e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt @@ -49,14 +49,12 @@ import com.ehviewer.core.ui.util.rememberInVM import com.ehviewer.core.util.launchIO import com.ehviewer.core.util.logcat import com.ehviewer.core.util.withIOContext -import com.hippo.ehviewer.EhApplication.Companion.imageCache import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.fillInfo -import com.hippo.ehviewer.client.getImageKey import com.hippo.ehviewer.coil.justDownload import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ktbuilder.executeIn @@ -250,10 +248,7 @@ fun AnimatedVisibilityScope.GalleryDetailScreen(args: GalleryDetailScreenArgs, n ) { Text(text = stringResource(id = R.string.clear_image_cache_confirm)) } - repeat(gd.pages) { - val key = getImageKey(gd.gid, it) - imageCache.remove(key) - } + SpiderDen(gd).clearCache() snackbar(cacheCleared) } },