From 0b6676aaa30fd5585d478b4f05707c753c8e2eec Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 17 Feb 2023 14:38:39 +0800 Subject: [PATCH] Preheat SpiderQueen in GalleryDetailScene, Resolve #818 --- .../com/hippo/ehviewer/spider/SpiderQueen.kt | 21 +++++-------------- .../ehviewer/ui/scene/GalleryDetailScene.kt | 7 ++++++- 2 files changed, 11 insertions(+), 17 deletions(-) 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 c515697ff..1748d8367 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt @@ -239,6 +239,11 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS notifyGetPages(mSpiderInfo.pages) } + suspend fun awaitStartPage(): Int { + prepareJob.join() + return mSpiderInfo.startPage + } + private fun stop() { launchNonCancellable { writeSpiderInfoToLocal() } cancel() @@ -516,22 +521,6 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS sQueenMap.remove(queen.galleryInfo.gid) } } - - fun getStartPage(gid: Long): Int { - val queen = sQueenMap[gid] - var spiderInfo: SpiderInfo? = null - - // Fast Path: read existing queen - if (queen != null) { - spiderInfo = queen.mSpiderInfo - } - - // Slow path, read diskcache - if (spiderInfo == null) { - spiderInfo = readFromCache(gid) - } - return spiderInfo?.startPage ?: 0 - } } override val coroutineContext: CoroutineContext diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index e6833bd89..0d23a6868 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -264,7 +264,7 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl mGalleryInfo?.let { viewLifecycleOwner.lifecycleScope.launchIO { runCatching { - val startPage = SpiderQueen.getStartPage(it.gid) + val startPage = spiderQueen?.awaitStartPage() ?: 0 withUIContext { binding.content.header.read.text = if (startPage == 0) { getString(R.string.read) @@ -354,6 +354,8 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl return true } + private var spiderQueen: SpiderQueen? = null + override fun onCreateViewWithToolbar( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -421,11 +423,14 @@ class GalleryDetailScene : CollapsingToolbarScene(), View.OnClickListener, Downl } downloadManager.addDownloadInfoListener(this) (requireActivity() as MainActivity).mShareUrl = galleryDetailUrl + spiderQueen = SpiderQueen.obtainSpiderQueen(galleryInfo!!, SpiderQueen.MODE_READ) return binding.root } override fun onDestroyView() { super.onDestroyView() + spiderQueen?.let { SpiderQueen.releaseSpiderQueen(it, SpiderQueen.MODE_READ) } + spiderQueen = null val context = context AssertUtils.assertNotNull(context) downloadManager.removeDownloadInfoListener(this)