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:
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))
}
}