Browse Source

Write library cover to library cover cache (#6883)

Andreas 3 years ago
parent
commit
3026ff241b
1 changed files with 26 additions and 1 deletions
  1. 26 1
      app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt

+ 26 - 1
app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt

@@ -22,6 +22,8 @@ import okhttp3.Request
 import okhttp3.Response
 import okhttp3.internal.closeQuietly
 import okio.Path.Companion.toOkioPath
+import okio.buffer
+import okio.sink
 import uy.kohesive.injekt.injectLazy
 import java.io.File
 import java.net.HttpURLConnection
@@ -101,6 +103,11 @@ class MangaCoverFetcher(
             val responseBody = checkNotNull(response.body) { "Null response source" }
             try {
                 snapshot = writeToDiskCache(snapshot, response)
+
+                if (coverCacheFile != null) {
+                    writeToCoverCache(coverCacheFile, response)
+                }
+
                 // Read from disk cache
                 if (snapshot != null) {
                     return SourceResult(
@@ -126,6 +133,21 @@ class MangaCoverFetcher(
         }
     }
 
+    private fun writeToCoverCache(cacheFile: File, response: Response) {
+        if (!options.diskCachePolicy.writeEnabled) return
+        try {
+            response.body!!.source().use { input ->
+                cacheFile.parentFile?.mkdirs()
+                if (cacheFile.exists()) {
+                    cacheFile.delete()
+                }
+                cacheFile.sink().buffer().use { output ->
+                    output.writeAll(input)
+                }
+            }
+        } catch (_: Exception) {}
+    }
+
     private suspend fun executeNetworkRequest(): Response {
         val client = sourceLazy.value?.client ?: callFactoryLazy.value
         val response = client.newCall(newRequest()).await()
@@ -167,7 +189,10 @@ class MangaCoverFetcher(
         return if (options.diskCachePolicy.readEnabled) diskCacheLazy.value[diskCacheKey!!] else null
     }
 
-    private fun writeToDiskCache(snapshot: DiskCache.Snapshot?, response: Response): DiskCache.Snapshot? {
+    private fun writeToDiskCache(
+        snapshot: DiskCache.Snapshot?,
+        response: Response,
+    ): DiskCache.Snapshot? {
         if (!options.diskCachePolicy.writeEnabled) {
             snapshot?.closeQuietly()
             return null