From 51a292e5d046bbdfa7b23e6d1e5c4f46d43d6db5 Mon Sep 17 00:00:00 2001 From: tarsin Date: Mon, 29 May 2023 15:36:35 +0800 Subject: [PATCH] Use runInterruptible for more sensitive cancellation --- .../com/hippo/ehviewer/spider/SpiderDen.kt | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt index dc8d8d477..da82a564a 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt @@ -34,8 +34,7 @@ import com.hippo.ehviewer.util.sendTo import com.hippo.ehviewer.yorozuya.FileUtils import com.hippo.unifile.UniFile import com.hippo.unifile.openOutputStream -import kotlinx.coroutines.currentCoroutineContext -import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.runInterruptible import moe.tarsin.coroutines.runSuspendCatching import okhttp3.Response import okio.buffer @@ -146,21 +145,22 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) { suspend fun doSave(outFile: UniFile): Long { var ret = 0L - outFile.openOutputStream().sink().buffer().use { sink -> - response.body.source().use { source -> - while (true) { - currentCoroutineContext().ensureActive() - val bytesRead = source.read(sink.buffer, 8192) - if (bytesRead == -1L) break - ret += bytesRead - sink.emitCompleteSegments() - notifyProgress(length, ret, bytesRead.toInt()) + runInterruptible { + outFile.openOutputStream().sink().buffer().use { sink -> + response.body.source().use { source -> + while (true) { + val bytesRead = source.read(sink.buffer, 8192) + if (bytesRead == -1L) break + ret += bytesRead + sink.emitCompleteSegments() + notifyProgress(length, ret, bytesRead.toInt()) + } } } - } - if (extension.lowercase() == "gif") { - outFile.openFileDescriptor("rw").use { - rewriteGifSource2(it.fd) + if (extension.lowercase() == "gif") { + outFile.openFileDescriptor("rw").use { + rewriteGifSource2(it.fd) + } } } return ret