Browse Source

Fix webtoon viewer pages not loading

Partial revert of fddca151823d066cad7f12da2e0b8d1c65f2b9d1
arkon 2 years ago
parent
commit
8ef200861c

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

@@ -246,28 +246,30 @@ class WebtoonPageHolder(
         unsubscribeReadImageHeader()
         val streamFn = page?.stream ?: return
 
+        var openStream: InputStream? = null
         readImageHeaderSubscription = Observable
             .fromCallable {
                 val stream = streamFn().buffered(16)
-                val imageStream = process(stream)
-                val isAnimated = ImageUtil.isAnimatedAndSupported(stream)
-                Pair(imageStream, isAnimated)
+                openStream = process(stream)
+
+                ImageUtil.isAnimatedAndSupported(stream)
             }
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
-            .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,
-                        ),
-                    )
-                }
+            .doOnNext { isAnimated ->
+                frame.setImage(
+                    openStream!!,
+                    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)