Don't update page progress and allow preload when on StencilPage (#7899)

Also cleanup a little in WebtoonPageHolder
This commit is contained in:
AntsyLich 2022-09-01 01:09:21 +06:00 committed by GitHub
parent 81f49f34ef
commit fddca15182
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 19 deletions

View file

@ -39,6 +39,7 @@ import eu.kanade.tachiyomi.ui.reader.loader.HttpPageLoader
import eu.kanade.tachiyomi.ui.reader.model.InsertPage
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.model.StencilPage
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
@ -414,8 +415,8 @@ class ReaderPresenter(
val selectedChapter = page.chapter
// Insert page doesn't change page progress
if (page is InsertPage) {
// InsertPage and StencilPage doesn't change page progress
if (page is InsertPage || page is StencilPage) {
return
}

View file

@ -246,30 +246,28 @@ class WebtoonPageHolder(
unsubscribeReadImageHeader()
val streamFn = page?.stream ?: return
var openStream: InputStream? = null
readImageHeaderSubscription = Observable
.fromCallable {
val stream = streamFn().buffered(16)
openStream = process(stream)
ImageUtil.isAnimatedAndSupported(stream)
val imageStream = process(stream)
val isAnimated = ImageUtil.isAnimatedAndSupported(stream)
Pair(imageStream, isAnimated)
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext { isAnimated ->
frame.setImage(
openStream!!,
isAnimated,
ReaderPageImageView.Config(
zoomDuration = viewer.config.doubleTapAnimDuration,
minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH,
cropBorders = viewer.config.imageCropBorders,
),
)
.doOnNext { (imageStream, isAnimated) ->
imageStream.use {
frame.setImage(
it,
isAnimated,
ReaderPageImageView.Config(
zoomDuration = viewer.config.doubleTapAnimDuration,
minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH,
cropBorders = viewer.config.imageCropBorders,
),
)
}
}
// Keep the Rx stream alive to close the input stream only when unsubscribed
.flatMap { Observable.never<Unit>() }
.doOnUnsubscribe { openStream?.close() }
.subscribe({}, {})
addSubscription(readImageHeaderSubscription)

View file

@ -210,6 +210,11 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
logcat { "onPageSelected: ${page.number}/${pages.size}" }
activity.onPageSelected(page)
// Skip preload on StencilPage
if (page is StencilPage) {
return
}
// Preload next chapter once we're within the last 5 pages of the current chapter
val inPreloadRange = pages.size - page.number < 5
if (inPreloadRange && allowPreload && page.chapter == adapter.currentChapter) {