Coroutinize SpiderQueen

This commit is contained in:
tarsin committed 2023-02-17 14:01:29 +08:00
1 parent dd123d7b87
commit 23184df1b9
5 files changed
+412 -645

No files matched your search

@@ -838,7 +838,7 @@ object DownloadManager : OnSpiderListener {
override fun onPageFailure(
index: Int,
error: String,
error: String?,
finished: Int,
downloaded: Int,
total: Int
@@ -860,11 +860,11 @@ object DownloadManager : OnSpiderListener {
SimpleHandler.getInstance().post(task)
}
override fun onGetImageSuccess(index: Int, image: Image) {
override fun onGetImageSuccess(index: Int, image: Image?) {
// Ignore
}
override fun onGetImageFailure(index: Int, error: String) {
override fun onGetImageFailure(index: Int, error: String?) {
// Ignore
}
@@ -45,8 +45,6 @@ public class EhPageLoader extends PageLoader2 implements SpiderQueen.OnSpiderLis
public void start() {
mSpiderQueen = SpiderQueen.obtainSpiderQueen(mGalleryInfo, SpiderQueen.MODE_READ);
mSpiderQueen.addOnSpiderListener(this);
if (mSpiderQueen.size() > 0)
notifyDataChanged();
}
@Override
@@ -116,7 +114,7 @@ public class EhPageLoader extends PageLoader2 implements SpiderQueen.OnSpiderLis
@Override
public int size() {
if (mSpiderQueen != null) {
return mSpiderQueen.size();
return mSpiderQueen.getSize();
} else {
return PageLoader.STATE_ERROR;
}
File diff suppressed because it is too large. Load diff
@@ -6,17 +6,12 @@ import com.hippo.ehviewer.client.EhEngine.getGalleryPage
import com.hippo.ehviewer.client.EhEngine.getGalleryPageApi
import com.hippo.ehviewer.client.EhUrl.getPageUrl
import com.hippo.ehviewer.client.exception.ParseException
import com.hippo.ehviewer.spider.SpiderQueen.DECODE_ERROR
import com.hippo.ehviewer.spider.SpiderQueen.ERROR_509
import com.hippo.ehviewer.spider.SpiderQueen.NETWORK_ERROR
import com.hippo.ehviewer.spider.SpiderQueen.PTOKEN_FAILED_MESSAGE
import com.hippo.ehviewer.spider.SpiderQueen.STATE_FAILED
import com.hippo.ehviewer.spider.SpiderQueen.STATE_FINISHED
import com.hippo.ehviewer.spider.SpiderQueen.Companion.STATE_FAILED
import com.hippo.ehviewer.spider.SpiderQueen.Companion.STATE_FINISHED
import com.hippo.image.Image.Companion.decode
import com.hippo.util.ExceptionUtils
import com.hippo.yorozuya.StringUtils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.delay
@@ -27,12 +22,12 @@ import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.sync.withPermit
import moe.tarsin.coroutines.runSuspendCatching
import kotlin.coroutines.CoroutineContext
class SpiderQueenWorker(private val queen: SpiderQueen) : CoroutineScope {
class SpiderQueenWorker(private val queen: SpiderQueen) : CoroutineScope by queen {
private val spiderDen
get() = queen.mSpiderDen
private val spiderInfo by lazy { queen.mSpiderInfo.get() }
private val spiderInfo
get() = queen.mSpiderInfo
private val mFetcherJobMap = hashMapOf<Int, Job>()
private val mSemaphore = Semaphore(Settings.getMultiThreadDownload())
private val pTokenLock = Mutex()
@@ -41,9 +36,7 @@ class SpiderQueenWorker(private val queen: SpiderQueen) : CoroutineScope {
private val mDownloadDelay = Settings.getDownloadDelay()
private var isDownloadMode = false
private val size
get() = queen.size()
override val coroutineContext: CoroutineContext
get() = Dispatchers.IO + Job()
get() = queen.size
fun cancelDecode(index: Int) {
decoder.cancel(index)
@@ -276,11 +276,6 @@ class ReaderActivity : EhActivity() {
mGalleryProvider!!.start()
// Get start page
if (savedInstanceState == null) {
mCurrentIndex = if (mPage >= 0) mPage else mGalleryProvider!!.startPage
}
lifecycleScope.launchUI {
mGalleryProvider!!.state.collect {
if (it == PageLoader.STATE_READY) {
@@ -295,9 +290,10 @@ class ReaderActivity : EhActivity() {
}
fun setGallery() {
// Get start page
if (mCurrentIndex == 0) mCurrentIndex = if (mPage >= 0) mPage else mGalleryProvider!!.startPage
mSize = mGalleryProvider!!.size()
val viewerMode =
ReadingModeType.fromPreference(readerPreferences.defaultReadingMode().get())
val viewerMode = ReadingModeType.fromPreference(readerPreferences.defaultReadingMode().get())
binding.actionReadingMode.setImageResource(viewerMode.iconRes)
viewer?.destroy()
viewer = ReadingModeType.toViewer(readerPreferences.defaultReadingMode().get(), this)