Avoid hard crash if cached image file was already deleted

Closes #9720

(cherry picked from commit 3ea026e3116a77fd58bf656e1ecdb5e1ab6de28a)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt
This commit is contained in:
arkon 2024-01-06 18:15:17 -05:00 committed by Jobobby04
parent 3e561f7b67
commit bd96864895
2 changed files with 79 additions and 63 deletions

View File

@ -158,6 +158,7 @@ class PagerPageHolder(
val streamFn = page.stream ?: return val streamFn = page.stream ?: return
val streamFn2 = extraPage?.stream val streamFn2 = extraPage?.stream
try {
val (bais, isAnimated, background) = withIOContext { val (bais, isAnimated, background) = withIOContext {
streamFn().buffered(16).use { stream -> streamFn().buffered(16).use { stream ->
// SY --> // SY -->
@ -208,6 +209,12 @@ class PagerPageHolder(
} }
removeErrorLayout() removeErrorLayout()
} }
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
withUIContext {
setError()
}
}
} }
private fun process(page: ReaderPage, imageStream: BufferedInputStream): InputStream { private fun process(page: ReaderPage, imageStream: BufferedInputStream): InputStream {

View File

@ -23,10 +23,12 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.supervisorScope import kotlinx.coroutines.supervisorScope
import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.suspendCancellableCoroutine
import logcat.LogPriority
import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.lang.withUIContext
import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.ImageUtil
import tachiyomi.core.util.system.logcat
import java.io.BufferedInputStream import java.io.BufferedInputStream
import java.io.InputStream import java.io.InputStream
@ -184,6 +186,7 @@ class WebtoonPageHolder(
val streamFn = page?.stream ?: return val streamFn = page?.stream ?: return
try {
val (openStream, isAnimated) = withIOContext { val (openStream, isAnimated) = withIOContext {
val stream = streamFn().buffered(16) val stream = streamFn().buffered(16)
val openStream = process(stream) val openStream = process(stream)
@ -207,6 +210,12 @@ class WebtoonPageHolder(
suspendCancellableCoroutine<Nothing> { continuation -> suspendCancellableCoroutine<Nothing> { continuation ->
continuation.invokeOnCancellation { openStream.close() } continuation.invokeOnCancellation { openStream.close() }
} }
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
withUIContext {
setError()
}
}
} }
private fun process(imageStream: BufferedInputStream): InputStream { private fun process(imageStream: BufferedInputStream): InputStream {