Preheat SpiderQueen in GalleryDetailScene, Resolve #818

This commit is contained in:
tarsin committed 2023-02-17 14:38:39 +08:00
1 parent c64167c76a
commit 0b6676aaa3
2 files changed
+11 -17

No files matched your search

@@ -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
@@ -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)