From 67a0893a978f66460ac2ef25451e2e93fa3f0e6c Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 17 Feb 2023 18:02:32 +0800 Subject: [PATCH] Fix crash of metadata not available --- .../ehviewer/gallery/ArchivePageLoader.java | 6 ++-- .../hippo/ehviewer/gallery/EhPageLoader.kt | 4 +-- .../com/hippo/ehviewer/spider/SpiderQueen.kt | 29 +++++++++---------- .../tachiyomi/ui/reader/ReaderActivity.kt | 3 +- .../tachiyomi/ui/reader/loader/PageLoader.kt | 2 +- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java b/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java index e6d8e3923..7bfcb8e8c 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java @@ -46,9 +46,7 @@ import java.util.Set; import java.util.Stack; import java.util.concurrent.atomic.AtomicInteger; -import eu.kanade.tachiyomi.ui.reader.loader.PageLoader; import kotlin.Pair; -import kotlin.Unit; import kotlin.coroutines.Continuation; import kotlin.coroutines.intrinsics.CoroutineSingletons; @@ -191,11 +189,11 @@ public class ArchivePageLoader extends PageLoader2 { } - private Continuation continuation = null; + private Continuation continuation = null; @Nullable @Override - public Object awaitReady(@NonNull Continuation $completion) { + public Object awaitReady(@NonNull Continuation $completion) { continuation = $completion; return CoroutineSingletons.COROUTINE_SUSPENDED; } diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.kt b/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.kt index 4764a97f5..b645416b9 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.kt +++ b/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.kt @@ -97,8 +97,8 @@ class EhPageLoader(private val mGalleryInfo: GalleryInfo) : PageLoader2(), OnSpi mSpiderQueen.forceRequest(index) } - override suspend fun awaitReady() { - mSpiderQueen.awaitReady() + override suspend fun awaitReady(): Boolean { + return mSpiderQueen.awaitReady() } override fun onCancelRequest(index: Int) { diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt index 4e5d680cb..31612ef80 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt @@ -212,10 +212,6 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS MODE_DOWNLOAD -> mDownloadReference++ } check(mDownloadReference <= 1) { "mDownloadReference can't more than 0" } - launchIO { - prepareJob.join() - updateMode() - } } private fun clearMode(@Mode mode: Int) { @@ -224,10 +220,6 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS MODE_DOWNLOAD -> mDownloadReference-- } check(!(mReadReference < 0 || mDownloadReference < 0)) { "Mode reference < 0" } - launchIO { - prepareJob.join() - updateMode() - } } private val prepareJob = launchIO { doPrepare() } @@ -436,6 +428,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS @Synchronized private fun writeSpiderInfoToLocal() { + if (!isReady) return mSpiderDen.downloadDir?.run { createFile(SPIDER_INFO_FILENAME).also { mSpiderInfo.write(it) } } mSpiderInfo.saveToCache() } @@ -513,17 +506,23 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS @JvmStatic fun obtainSpiderQueen(galleryInfo: GalleryInfo, @Mode mode: Int): SpiderQueen { - return sQueenMap[galleryInfo.gid]?.apply { setMode(mode) } - ?: SpiderQueen(galleryInfo).apply { setMode(mode) } - .also { sQueenMap[galleryInfo.gid] = it } + val gid = galleryInfo.gid + return (sQueenMap[gid] ?: SpiderQueen(galleryInfo).also { sQueenMap[gid] = it }).apply { + setMode(mode) + launchIO { if (awaitReady()) updateMode() } + } } @JvmStatic fun releaseSpiderQueen(queen: SpiderQueen, @Mode mode: Int) { - queen.clearMode(mode) - if (queen.mReadReference == 0 && queen.mDownloadReference == 0) { - queen.stop() - sQueenMap.remove(queen.galleryInfo.gid) + queen.run { + clearMode(mode) + if (mReadReference == 0 && mDownloadReference == 0) { + stop() + sQueenMap.remove(galleryInfo.gid) + } else { + launchIO { if (awaitReady()) updateMode() } + } } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 20b8c9a58..1e3ffeb0c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -271,8 +271,7 @@ class ReaderActivity : EhActivity() { mGalleryProvider!!.start() lifecycleScope.launchUI { - mGalleryProvider!!.awaitReady() - setGallery() + if (mGalleryProvider!!.awaitReady()) setGallery() } config = ReaderConfig() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt index 5d6520f9d..793ade52e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt @@ -18,7 +18,7 @@ abstract class PageLoader { private val mPreloads = MathUtils.clamp(com.hippo.ehviewer.Settings.getPreloadImage(), 0, 100) - abstract suspend fun awaitReady() + abstract suspend fun awaitReady(): Boolean abstract fun start()