From 368d70226d3cd1da327107970a45fc1dc3d1843d Mon Sep 17 00:00:00 2001 From: rhunk <101876869+rhunk@users.noreply.github.com> Date: Sun, 10 Dec 2023 11:28:05 +0100 Subject: [PATCH] fix(app/download_processor): detect deleted files --- .../me/rhunk/snapenhance/download/DownloadProcessor.kt | 10 ++++++++++ .../kotlin/me/rhunk/snapenhance/task/TaskManager.kt | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt b/app/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt index 17605a06..bbc8576f 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt @@ -341,6 +341,16 @@ class DownloadProcessor ( if (task.status.isFinalStage()) { if (task.status != TaskStatus.SUCCESS) return@let + // check if the media file has been deleted + if (task.type == TaskType.DOWNLOAD) { + val outputFile = runCatching { + DocumentFile.fromTreeUri(remoteSideContext.androidContext, Uri.parse(task.extra)) + }.getOrNull() + + if (outputFile != null && !outputFile.exists()) { + return@let + } + } callbackOnFailure(translation["already_downloaded_toast"], null) } else { callbackOnFailure(translation["already_queued_toast"], null) diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/task/TaskManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/task/TaskManager.kt index 62b8e2a1..0b85b6fe 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/task/TaskManager.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/task/TaskManager.kt @@ -50,6 +50,13 @@ class TaskManager( return runBlocking { suspendCoroutine { queueExecutor.execute { + taskDatabase.rawQuery("SELECT * FROM tasks WHERE hash = ?", arrayOf(task.hash)).use { cursor -> + if (cursor.moveToNext()) { + it.resumeWith(Result.success(cursor.getLong("id"))) + return@execute + } + } + val result = taskDatabase.insert("tasks", null, ContentValues().apply { put("type", task.type.key) put("hash", task.hash) @@ -57,6 +64,7 @@ class TaskManager( put("status", task.status.key) put("extra", task.extra) }) + it.resumeWith(Result.success(result)) } }