From 16f3f74a905be2f1621c4ace3446e869f83dd5a8 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Mon, 20 Feb 2023 15:07:16 +0800 Subject: [PATCH] Clean up unfinished download files --- .../main/java/com/hippo/ehviewer/spider/SpiderDen.kt | 5 +++-- .../java/com/hippo/ehviewer/spider/SpiderQueen.kt | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 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 3ec56c51f..403868a94 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt @@ -38,6 +38,7 @@ import com.hippo.yorozuya.FileUtils import com.hippo.yorozuya.MathUtils import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.ensureActive +import moe.tarsin.coroutines.runSuspendCatching import okhttp3.executeAsync import okio.buffer import java.io.File @@ -197,7 +198,7 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) { return receivedSize } - findDownloadFileForIndex(index, extension)?.runCatching { + findDownloadFileForIndex(index, extension)?.runSuspendCatching { openOutputStream().use { outputStream -> (outputStream as FileOutputStream).channel.use { return doSave(it) == length } } @@ -210,7 +211,7 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) { if (mMode == SpiderQueen.MODE_READ) { val key = EhCacheKeyFactory.getImageKey(mGid, index) var received: Long = 0 - runCatching { + runSuspendCatching { sCache.edit(key) { metadata.toFile().writeText(extension) data.toFile().outputStream().use { outputStream -> diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt index 9697b53cc..c756f00ea 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt @@ -241,7 +241,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS } private fun stop() { - launchNonCancellable { writeSpiderInfoToLocal() } + launchNonCancellable { runCatching { writeSpiderInfoToLocal() } } cancel() } @@ -570,6 +570,15 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS mSemaphore.withPermit { doInJob(index, force) } + }.apply { + invokeOnCompletion { + if (getPageState(index) == STATE_DOWNLOADING) { + Log.d(WORKER_DEBUG_TAG, "Download image cancelled $index") + launchNonCancellable { + mSpiderDen.remove(index) + } + } + } } } }