From c64167c76af9a2ba4d1df97bf59a6ae9c18bf746 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 17 Feb 2023 14:27:11 +0800 Subject: [PATCH] Merge SpiderInfo Utils --- .../com/hippo/ehviewer/spider/SpiderInfo.kt | 55 ++++++++++++++++++ .../hippo/ehviewer/spider/SpiderInfoUtils.kt | 57 ------------------- 2 files changed, 55 insertions(+), 57 deletions(-) delete mode 100644 app/src/main/java/com/hippo/ehviewer/spider/SpiderInfoUtils.kt diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt index 40baacc60..913dd97ca 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt @@ -1,6 +1,14 @@ package com.hippo.ehviewer.spider +import coil.disk.DiskCache +import com.hippo.compat.readLegacySpiderInfo +import com.hippo.ehviewer.EhApplication +import com.hippo.unifile.UniFile import kotlinx.serialization.Serializable +import kotlinx.serialization.cbor.Cbor +import kotlinx.serialization.decodeFromByteArray +import kotlinx.serialization.encodeToByteArray +import java.io.File @Serializable class SpiderInfo @JvmOverloads constructor( @@ -18,3 +26,50 @@ class SpiderInfo @JvmOverloads constructor( var previewPerPage: Int = -1 ) + +fun SpiderInfo.write(file: UniFile) { + file.openOutputStream().use { + it.write(Cbor.encodeToByteArray(this)) + } +} + +fun SpiderInfo.saveToCache() { + val entry = spiderInfoCache.edit(gid.toString()) ?: return + runCatching { + entry.data.toFile().writeBytes(Cbor.encodeToByteArray(this)) + }.onFailure { + it.printStackTrace() + entry.abort() + }.onSuccess { + entry.commit() + } +} + +private val spiderInfoCache by lazy { + DiskCache.Builder() + .directory(File(EhApplication.application.cacheDir, "spider_info_v2_1")) + .maxSizeBytes(20 * 1024 * 1024).build() +} + +fun readFromCache(gid: Long): SpiderInfo? { + val snapshot = spiderInfoCache[gid.toString()] ?: return null + return runCatching { + snapshot.use { + return Cbor.decodeFromByteArray(it.data.toFile().readBytes()) + } + }.onFailure { + it.printStackTrace() + }.getOrNull() +} + +fun readCompatFromUniFile(file: UniFile): SpiderInfo? { + return runCatching { + file.openInputStream().use { + Cbor.decodeFromByteArray(it.readBytes()) + } + }.getOrNull() ?: runCatching { + file.openInputStream().use { readLegacySpiderInfo(it) } + }.getOrNull() +} + +const val TOKEN_FAILED = "failed" diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfoUtils.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfoUtils.kt deleted file mode 100644 index a78f75589..000000000 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfoUtils.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.hippo.ehviewer.spider - -import coil.disk.DiskCache -import com.hippo.compat.readLegacySpiderInfo -import com.hippo.ehviewer.EhApplication -import com.hippo.unifile.UniFile -import kotlinx.serialization.cbor.Cbor -import kotlinx.serialization.decodeFromByteArray -import kotlinx.serialization.encodeToByteArray -import java.io.File - -fun SpiderInfo.write(file: UniFile) { - file.openOutputStream().use { - it.write(Cbor.encodeToByteArray(this)) - } -} - -fun SpiderInfo.saveToCache() { - val entry = spiderInfoCache.edit(gid.toString()) ?: return - runCatching { - entry.data.toFile().writeBytes(Cbor.encodeToByteArray(this)) - }.onFailure { - it.printStackTrace() - entry.abort() - }.onSuccess { - entry.commit() - } -} - -private val spiderInfoCache by lazy { - DiskCache.Builder() - .directory(File(EhApplication.application.cacheDir, "spider_info_v2_1")) - .maxSizeBytes(20 * 1024 * 1024).build() -} - -fun readFromCache(gid: Long): SpiderInfo? { - val snapshot = spiderInfoCache[gid.toString()] ?: return null - return runCatching { - snapshot.use { - return Cbor.decodeFromByteArray(it.data.toFile().readBytes()) - } - }.onFailure { - it.printStackTrace() - }.getOrNull() -} - -fun readCompatFromUniFile(file: UniFile): SpiderInfo? { - return runCatching { - file.openInputStream().use { - Cbor.decodeFromByteArray(it.readBytes()) - } - }.getOrNull() ?: runCatching { - file.openInputStream().use { readLegacySpiderInfo(it) } - }.getOrNull() -} - -const val TOKEN_FAILED = "failed"