Support downloading original images in reader
This commit is contained in:
1 parent
ce888a0982
commit
f08e124df6
8 files changed
+41
-16
No files matched your search
@@ -128,7 +128,7 @@ class ArchivePageLoader(context: Context, private val uri: Uri, passwdFlow: Flow
|
||||
notifyPageSucceed(index, image)
|
||||
}
|
||||
|
||||
override fun onForceRequest(index: Int) {
|
||||
override fun onForceRequest(index: Int, orgImg: Boolean) {
|
||||
onRequest(index)
|
||||
}
|
||||
|
||||
|
||||
@@ -76,8 +76,8 @@ class EhPageLoader(private val mGalleryInfo: GalleryInfo) : PageLoader2(), OnSpi
|
||||
mSpiderQueen.request(index)
|
||||
}
|
||||
|
||||
override fun onForceRequest(index: Int) {
|
||||
mSpiderQueen.forceRequest(index)
|
||||
override fun onForceRequest(index: Int, orgImg: Boolean) {
|
||||
mSpiderQueen.forceRequest(index, orgImg)
|
||||
}
|
||||
|
||||
override suspend fun awaitReady(): Boolean {
|
||||
|
||||
@@ -255,8 +255,8 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
val error: String?
|
||||
get() = null
|
||||
|
||||
fun forceRequest(index: Int) {
|
||||
request(index, true)
|
||||
fun forceRequest(index: Int, orgImg: Boolean) {
|
||||
request(index, true, orgImg)
|
||||
}
|
||||
|
||||
fun request(index: Int) {
|
||||
@@ -281,7 +281,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
mWorkerScope.updateRAList(pages, pair)
|
||||
}
|
||||
|
||||
private fun request(index: Int, force: Boolean) {
|
||||
private fun request(index: Int, force: Boolean, orgImg: Boolean = false) {
|
||||
// Get page state
|
||||
val state = getPageState(index)
|
||||
|
||||
@@ -290,7 +290,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
// Update state to none at once
|
||||
updatePageState(index, STATE_NONE)
|
||||
}
|
||||
mWorkerScope.launch(index, force)
|
||||
mWorkerScope.launch(index, force, orgImg)
|
||||
}
|
||||
|
||||
fun save(index: Int, file: UniFile): Boolean {
|
||||
@@ -558,7 +558,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
}
|
||||
}
|
||||
|
||||
private fun doLaunchDownloadJob(index: Int, force: Boolean) {
|
||||
private fun doLaunchDownloadJob(index: Int, force: Boolean, orgImg: Boolean = false) {
|
||||
val state = mPageStateArray[index]
|
||||
if (!force && state == STATE_FINISHED) return
|
||||
val currentJob = mFetcherJobMap[index]
|
||||
@@ -566,7 +566,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
if (currentJob?.isActive != true) {
|
||||
mFetcherJobMap[index] = launch {
|
||||
mSemaphore.withPermit {
|
||||
doInJob(index, force)
|
||||
doInJob(index, force, orgImg)
|
||||
}
|
||||
}.apply {
|
||||
invokeOnCompletion {
|
||||
@@ -579,14 +579,16 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
}
|
||||
}
|
||||
|
||||
fun launch(index: Int, force: Boolean = false) {
|
||||
fun launch(index: Int, force: Boolean = false, orgImg: Boolean) {
|
||||
check(index in 0 until size)
|
||||
if (!isDownloadMode) synchronized(mFetcherJobMap) { doLaunchDownloadJob(index, force) }
|
||||
if (!isDownloadMode) {
|
||||
synchronized(mFetcherJobMap) { doLaunchDownloadJob(index, force, orgImg) }
|
||||
}
|
||||
if (force) decoder.cancel(index)
|
||||
decoder.launch(index)
|
||||
}
|
||||
|
||||
private suspend fun doInJob(index: Int, force: Boolean) {
|
||||
private suspend fun doInJob(index: Int, force: Boolean, orgImg: Boolean) {
|
||||
suspend fun getPToken(index: Int): String? {
|
||||
if (index !in 0 until size) return null
|
||||
return mSpiderInfo.pTokenMap[index].takeIf { it != TOKEN_FAILED }
|
||||
@@ -715,7 +717,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
|
||||
val targetImageUrl: String?
|
||||
val referer: String?
|
||||
|
||||
if (Settings.downloadOriginImage && !originImageUrl.isNullOrBlank()) {
|
||||
if ((Settings.downloadOriginImage || orgImg) && !originImageUrl.isNullOrBlank()) {
|
||||
targetImageUrl = originImageUrl
|
||||
referer = EhUrl.getPageUrl(mSpiderInfo.gid, index, pToken)
|
||||
} else {
|
||||
|
||||
@@ -24,6 +24,7 @@ class ReaderPageSheet(
|
||||
binding.save.setOnClickListener { save() }
|
||||
binding.saveTo.setOnClickListener { saveTo() }
|
||||
binding.refresh.setOnClickListener { refresh() }
|
||||
binding.refreshOrgImg.setOnClickListener { refreshOrgImg() }
|
||||
|
||||
return binding.root
|
||||
}
|
||||
@@ -64,4 +65,9 @@ class ReaderPageSheet(
|
||||
activity.mGalleryProvider?.retryPage(page.index)
|
||||
dismiss()
|
||||
}
|
||||
|
||||
private fun refreshOrgImg() {
|
||||
activity.mGalleryProvider?.retryPage(page.index, true)
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
@@ -53,16 +53,16 @@ abstract class PageLoader {
|
||||
preloadPages(pagesAbsent, (index - 10).coerceAtLeast(0) to (mPreloads + index + 10).coerceAtMost(size))
|
||||
}
|
||||
|
||||
fun retryPage(index: Int) {
|
||||
fun retryPage(index: Int, orgImg: Boolean = false) {
|
||||
notifyPageWait(index)
|
||||
onForceRequest(index)
|
||||
onForceRequest(index, orgImg)
|
||||
}
|
||||
|
||||
protected abstract fun preloadPages(pages: List<Int>, pair: Pair<Int, Int>)
|
||||
|
||||
protected abstract fun onRequest(index: Int)
|
||||
|
||||
protected abstract fun onForceRequest(index: Int)
|
||||
protected abstract fun onForceRequest(index: Int, orgImg: Boolean)
|
||||
|
||||
fun cancelRequest(index: Int) {
|
||||
onCancelRequest(index)
|
||||
|
||||
@@ -131,6 +131,7 @@ class PagerPageHolder(
|
||||
private fun setQueued() {
|
||||
progressIndicator.show()
|
||||
errorLayout?.root?.isVisible = false
|
||||
recycle()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -171,6 +171,7 @@ class WebtoonPageHolder(
|
||||
progressContainer.isVisible = true
|
||||
progressIndicator.show()
|
||||
removeErrorLayout()
|
||||
frame.recycle()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user