commit 368d70226d3cd1da327107970a45fc1dc3d1843d
parent 9583d67bf1da3c9abb1f35a1000d1186ab07a154
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sun, 10 Dec 2023 11:28:05 +0100

fix(app/download_processor): detect deleted files

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/download/DownloadProcessor.kt | 10++++++++++
Mapp/src/main/kotlin/me/rhunk/snapenhance/task/TaskManager.kt | 8++++++++
2 files changed, 18 insertions(+), 0 deletions(-)

diff --git 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 @@ -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)) } }