diff --git a/app/src/main/java/com/hippo/compat/SpiderInfoCompat.kt b/app/src/main/java/com/hippo/compat/SpiderInfoCompat.kt new file mode 100644 index 000000000..933d0fd71 --- /dev/null +++ b/app/src/main/java/com/hippo/compat/SpiderInfoCompat.kt @@ -0,0 +1,40 @@ +package com.hippo.compat + +import com.hippo.ehviewer.spider.SpiderInfo +import com.hippo.yorozuya.IOUtils +import java.io.InputStream + +fun readLegacySpiderInfo(inputStream: InputStream): SpiderInfo { + fun read(): String { + return IOUtils.readAsciiLine(inputStream) + } + + fun readInt(): Int { + return read().toInt() + } + + fun readLong(): Long { + return read().toLong() + } + repeat(2) { read() } // We assert that only info v2 + val gid = readLong() + val token = read() + read() + val previewPages = readInt() + val previewPerPage = readInt() + val pages = read().toInt() + val pTokenMap = hashMapOf() + val info = SpiderInfo(gid, pages, pTokenMap, 0, token, previewPages, previewPerPage) + runCatching { + val line = read() + val pos = line.indexOf(" ") + if (pos > 0) { + val index = line.substring(0, pos).toInt() + val pToken = line.substring(pos + 1) + if (pToken.isNotEmpty()) { + pTokenMap[index] = pToken + } + } + } + return info +} diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt index 2a947abcb..3866264d7 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt @@ -581,7 +581,7 @@ class DownloadManager : OnSpiderListener { galleryInfo.rating = downloadInfo.rating val downloadDir = SpiderDen.getGalleryDownloadDir(galleryInfo.gid) ?: continue val file = downloadDir.findFile(SpiderQueen.SPIDER_INFO_FILENAME) ?: continue - val spiderInfo = SpiderInfo.read(file) ?: continue + val spiderInfo = SpiderInfo.readCompatFromUniFile(file) ?: continue spiderInfo.startPage = 0 try { spiderInfo.write(file) diff --git a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt index 607a21c39..bba293c4d 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt +++ b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt @@ -32,10 +32,8 @@ import com.hippo.ehviewer.spider.SpiderQueen import com.hippo.ehviewer.ui.scene.BaseScene import com.hippo.unifile.UniFile import com.hippo.util.ExceptionUtils -import com.hippo.yorozuya.IOUtils import kotlinx.coroutines.runBlocking import java.io.IOException -import java.io.InputStream import java.util.Collections class RestoreDownloadPreference constructor( @@ -54,7 +52,7 @@ class RestoreDownloadPreference constructor( } val siFile = file.findFile(SpiderQueen.SPIDER_INFO_FILENAME) ?: return null return try { - val spiderInfo = SpiderInfo.read(siFile) ?: return null + val spiderInfo = SpiderInfo.readCompatFromUniFile(siFile) ?: return null val gid = spiderInfo.gid val dirname = file.name if (mManager.containDownloadInfo(gid)) { 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 a7b2658c8..f9c4cddcb 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt @@ -4,16 +4,15 @@ package com.hippo.ehviewer.spider import coil.annotation.ExperimentalCoilApi import coil.disk.DiskCache +import com.hippo.compat.readLegacySpiderInfo import com.hippo.ehviewer.EhApplication import com.hippo.unifile.UniFile -import com.hippo.yorozuya.IOUtils import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.cbor.Cbor import kotlinx.serialization.decodeFromByteArray import kotlinx.serialization.encodeToByteArray import java.io.File -import java.io.InputStream @Serializable class SpiderInfo @JvmOverloads constructor( @@ -71,51 +70,16 @@ class SpiderInfo @JvmOverloads constructor( } @JvmStatic - fun read(file: UniFile): SpiderInfo? { + fun readCompatFromUniFile(file: UniFile): SpiderInfo? { return runCatching { file.openInputStream().use { Cbor.decodeFromByteArray(it.readBytes()) } }.getOrNull() ?: runCatching { - file.openInputStream().use { readV1(it) } + file.openInputStream().use { readLegacySpiderInfo(it) } }.getOrNull() } - private fun readV1(inputStream: InputStream): SpiderInfo { - fun read(): String { - return IOUtils.readAsciiLine(inputStream) - } - - fun readInt(): Int { - return read().toInt() - } - - fun readLong(): Long { - return read().toLong() - } - repeat(2) { read() } // We assert that only info v2 - val gid = readLong() - val token = read() - read() - val previewPages = readInt() - val previewPerPage = readInt() - val pages = read().toInt() - val pTokenMap = hashMapOf() - val info = SpiderInfo(gid, pages, pTokenMap, 0, token, previewPages, previewPerPage) - runCatching { - val line = read() - val pos = line.indexOf(" ") - if (pos > 0) { - val index = line.substring(0, pos).toInt() - val pToken = line.substring(pos + 1) - if (pToken.isNotEmpty()) { - pTokenMap[index] = pToken - } - } - } - return info - } - const val TOKEN_FAILED = "failed" } } \ No newline at end of file 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 5015b7dbb..bd3362d97 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -696,7 +696,7 @@ public final class SpiderQueen implements Runnable { if (downloadDir != null) { UniFile file = downloadDir.findFile(SPIDER_INFO_FILENAME); if (file != null) { - spiderInfo = SpiderInfo.read(file); + spiderInfo = SpiderInfo.readCompatFromUniFile(file); if (spiderInfo != null && spiderInfo.getGid() == mGalleryInfo.getGid() && spiderInfo.getToken().equals(mGalleryInfo.getToken())) { return spiderInfo;