|
@@ -17,10 +17,12 @@ import kotlinx.coroutines.MainScope
|
|
|
import kotlinx.coroutines.flow.collectLatest
|
|
|
import kotlinx.coroutines.launch
|
|
|
import kotlinx.coroutines.supervisorScope
|
|
|
+import logcat.LogPriority
|
|
|
import tachiyomi.core.util.lang.launchIO
|
|
|
import tachiyomi.core.util.lang.withIOContext
|
|
|
import tachiyomi.core.util.lang.withUIContext
|
|
|
import tachiyomi.core.util.system.ImageUtil
|
|
|
+import tachiyomi.core.util.system.logcat
|
|
|
import java.io.BufferedInputStream
|
|
|
import java.io.ByteArrayInputStream
|
|
|
import java.io.InputStream
|
|
@@ -136,40 +138,47 @@ class PagerPageHolder(
|
|
|
|
|
|
val streamFn = page.stream ?: return
|
|
|
|
|
|
- val (bais, isAnimated, background) = withIOContext {
|
|
|
- streamFn().buffered(16).use { stream ->
|
|
|
- process(item, stream).use { itemStream ->
|
|
|
- val bais = ByteArrayInputStream(itemStream.readBytes())
|
|
|
- val isAnimated = ImageUtil.isAnimatedAndSupported(bais)
|
|
|
- bais.reset()
|
|
|
- val background = if (!isAnimated && viewer.config.automaticBackground) {
|
|
|
- ImageUtil.chooseBackground(context, bais)
|
|
|
- } else {
|
|
|
- null
|
|
|
+ try {
|
|
|
+ val (bais, isAnimated, background) = withIOContext {
|
|
|
+ streamFn().buffered(16).use { stream ->
|
|
|
+ process(item, stream).use { itemStream ->
|
|
|
+ val bais = ByteArrayInputStream(itemStream.readBytes())
|
|
|
+ val isAnimated = ImageUtil.isAnimatedAndSupported(bais)
|
|
|
+ bais.reset()
|
|
|
+ val background = if (!isAnimated && viewer.config.automaticBackground) {
|
|
|
+ ImageUtil.chooseBackground(context, bais)
|
|
|
+ } else {
|
|
|
+ null
|
|
|
+ }
|
|
|
+ bais.reset()
|
|
|
+ Triple(bais, isAnimated, background)
|
|
|
}
|
|
|
- bais.reset()
|
|
|
- Triple(bais, isAnimated, background)
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- withUIContext {
|
|
|
- bais.use {
|
|
|
- setImage(
|
|
|
- it,
|
|
|
- isAnimated,
|
|
|
- Config(
|
|
|
- zoomDuration = viewer.config.doubleTapAnimDuration,
|
|
|
- minimumScaleType = viewer.config.imageScaleType,
|
|
|
- cropBorders = viewer.config.imageCropBorders,
|
|
|
- zoomStartPosition = viewer.config.imageZoomType,
|
|
|
- landscapeZoom = viewer.config.landscapeZoom,
|
|
|
- ),
|
|
|
- )
|
|
|
- if (!isAnimated) {
|
|
|
- pageBackground = background
|
|
|
+ withUIContext {
|
|
|
+ bais.use {
|
|
|
+ setImage(
|
|
|
+ it,
|
|
|
+ isAnimated,
|
|
|
+ Config(
|
|
|
+ zoomDuration = viewer.config.doubleTapAnimDuration,
|
|
|
+ minimumScaleType = viewer.config.imageScaleType,
|
|
|
+ cropBorders = viewer.config.imageCropBorders,
|
|
|
+ zoomStartPosition = viewer.config.imageZoomType,
|
|
|
+ landscapeZoom = viewer.config.landscapeZoom,
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ if (!isAnimated) {
|
|
|
+ pageBackground = background
|
|
|
+ }
|
|
|
}
|
|
|
+ removeErrorLayout()
|
|
|
+ }
|
|
|
+ } catch (e: Throwable) {
|
|
|
+ logcat(LogPriority.ERROR, e)
|
|
|
+ withUIContext {
|
|
|
+ setError()
|
|
|
}
|
|
|
- removeErrorLayout()
|
|
|
}
|
|
|
}
|
|
|
|