From d8ccec45f9c51738fc00ccf6c0d83716b3a63ad6 Mon Sep 17 00:00:00 2001 From: tarsin Date: Thu, 29 Dec 2022 20:27:33 +0800 Subject: [PATCH] Convert spiderInfo cache to Coil DiskCache --- .../java/com/hippo/ehviewer/EhApplication.kt | 8 ++-- .../hippo/ehviewer/spider/SpiderQueen.java | 41 ++++++++----------- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt index 1bc25a443..efe729128 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt @@ -32,9 +32,9 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner import coil.ImageLoader import coil.ImageLoaderFactory +import coil.disk.DiskCache import com.hippo.Native import com.hippo.app.BaseDialogBuilder -import com.hippo.beerbelly.SimpleDiskCache import com.hippo.ehviewer.client.EhClient import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhDns @@ -332,10 +332,8 @@ class EhApplication : SceneApplication(), DefaultLifecycleObserver, ImageLoaderF @JvmStatic val spiderInfoCache by lazy { - SimpleDiskCache( - File(application.cacheDir, "spider_info"), - 20 * 1024 * 1024 - ) + DiskCache.Builder().directory(File(application.cacheDir, "spider_info")) + .maxSizeBytes(20 * 1024 * 1024).build() } @JvmStatic diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index 3827c3e9f..aa522ef5e 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -30,7 +30,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; -import com.hippo.beerbelly.SimpleDiskCache; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.GetText; import com.hippo.ehviewer.R; @@ -65,6 +64,7 @@ import com.hippo.yorozuya.thread.PriorityThreadFactory; import java.io.BufferedInputStream; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -82,6 +82,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; +import coil.disk.DiskCache; import eu.kanade.tachiyomi.ui.reader.loader.PageLoader; import okhttp3.Call; import okhttp3.MediaType; @@ -112,7 +113,7 @@ public final class SpiderQueen implements Runnable { @NonNull private final OkHttpClient mHttpClient; @NonNull - private final SimpleDiskCache mSpiderInfoCache; + private final DiskCache mSpiderInfoCache; @NonNull private final GalleryInfo mGalleryInfo; @NonNull @@ -689,21 +690,16 @@ public final class SpiderQueen implements Runnable { } // Read from cache - InputStreamPipe pipe = mSpiderInfoCache.getInputStreamPipe(Long.toString(mGalleryInfo.gid)); - if (null != pipe) { - try { - pipe.obtain(); - spiderInfo = SpiderInfo.read(pipe.open()); - if (spiderInfo != null && spiderInfo.gid == mGalleryInfo.gid && - spiderInfo.token.equals(mGalleryInfo.token)) { - return spiderInfo; - } - } catch (IOException e) { - // Ignore - } finally { - pipe.close(); - pipe.release(); + var entry = mSpiderInfoCache.get(Long.toString(mGalleryInfo.gid)); + if (entry == null) return null; + try (entry; InputStream is = new FileInputStream(entry.getData().toFile())) { + spiderInfo = SpiderInfo.read(is); + if (spiderInfo != null && spiderInfo.gid == mGalleryInfo.gid && + spiderInfo.token.equals(mGalleryInfo.token)) { + return spiderInfo; } + } catch (IOException e) { + // Ignore } return null; @@ -843,16 +839,15 @@ public final class SpiderQueen implements Runnable { } } - // Read from cache - OutputStreamPipe pipe = mSpiderInfoCache.getOutputStreamPipe(Long.toString(mGalleryInfo.gid)); - try { - pipe.obtain(); - spiderInfo.write(pipe.open()); + // Write to cache + var editor = mSpiderInfoCache.edit(Long.toString(mGalleryInfo.gid)); + if (editor == null) return; + try (OutputStream os = new FileOutputStream(editor.getData().toFile())) { + spiderInfo.write(os); } catch (IOException e) { // Ignore } finally { - pipe.close(); - pipe.release(); + editor.commit(); } }