Browse Source

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

Also cleanup a little in WebtoonPageHolder
AntsyLich 2 years ago
parent
commit
fddca15182

+ 3 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt

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

+ 15 - 17
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt

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

+ 5 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt

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