From 9ca5ebe6d2197302cf498a3a3f18678850fa44b9 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Thu, 10 Feb 2022 12:10:27 -0500 Subject: [PATCH] Do not download attachments if they are expired --- app/src/main/java/io/heckel/ntfy/msg/DownloadManager.kt | 8 ++++---- .../java/io/heckel/ntfy/msg/NotificationDispatcher.kt | 9 +++++++-- app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt | 8 +++++++- app/src/main/res/values/strings.xml | 2 ++ fastlane/metadata/android/en-US/changelog/22.txt | 3 +++ 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/heckel/ntfy/msg/DownloadManager.kt b/app/src/main/java/io/heckel/ntfy/msg/DownloadManager.kt index 8655dc2..4ff45e2 100644 --- a/app/src/main/java/io/heckel/ntfy/msg/DownloadManager.kt +++ b/app/src/main/java/io/heckel/ntfy/msg/DownloadManager.kt @@ -18,13 +18,13 @@ class DownloadManager { private const val TAG = "NtfyDownloadManager" private const val DOWNLOAD_WORK_NAME_PREFIX = "io.heckel.ntfy.DOWNLOAD_FILE_" - fun enqueue(context: Context, id: String, userAction: Boolean) { + fun enqueue(context: Context, notificationId: String, userAction: Boolean) { val workManager = WorkManager.getInstance(context) - val workName = DOWNLOAD_WORK_NAME_PREFIX + id - Log.d(TAG,"Enqueuing work to download attachment for notification $id, work: $workName") + val workName = DOWNLOAD_WORK_NAME_PREFIX + notificationId + Log.d(TAG,"Enqueuing work to download attachment for notification $notificationId, work: $workName") val workRequest = OneTimeWorkRequest.Builder(DownloadWorker::class.java) .setInputData(workDataOf( - DownloadWorker.INPUT_DATA_ID to id, + DownloadWorker.INPUT_DATA_ID to notificationId, DownloadWorker.INPUT_DATA_USER_ACTION to userAction )) .build() diff --git a/app/src/main/java/io/heckel/ntfy/msg/NotificationDispatcher.kt b/app/src/main/java/io/heckel/ntfy/msg/NotificationDispatcher.kt index 1a7e0b5..8bd5f2b 100644 --- a/app/src/main/java/io/heckel/ntfy/msg/NotificationDispatcher.kt +++ b/app/src/main/java/io/heckel/ntfy/msg/NotificationDispatcher.kt @@ -49,15 +49,20 @@ class NotificationDispatcher(val context: Context, val repository: Repository) { if (notification.attachment == null) { return false } + val attachment = notification.attachment + if (attachment.expires != null && attachment.expires < System.currentTimeMillis()/1000) { + Log.d(TAG, "Attachment already expired at ${attachment.expires}, not downloading") + return false + } val maxAutoDownloadSize = repository.getAutoDownloadMaxSize() when (maxAutoDownloadSize) { Repository.AUTO_DOWNLOAD_ALWAYS -> return true Repository.AUTO_DOWNLOAD_NEVER -> return false else -> { - if (notification.attachment.size == null) { + if (attachment.size == null) { return true // DownloadWorker will bail out if attachment is too large! } - return notification.attachment.size <= maxAutoDownloadSize + return attachment.size <= maxAutoDownloadSize } } } diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt index d007032..6029d16 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt @@ -305,7 +305,13 @@ class DetailAdapter(private val activity: Activity, private val repository: Repo infos.add(context.getString(R.string.detail_item_download_info_deleted)) } } else if (failed) { - infos.add(context.getString(R.string.detail_item_download_info_download_failed)) + if (expired) { + infos.add(context.getString(R.string.detail_item_download_info_download_failed_expired)) + } else if (expires) { + infos.add(context.getString(R.string.detail_item_download_info_download_failed_expires_x, formatDateShort(attachment.expires!!))) + } else { + infos.add(context.getString(R.string.detail_item_download_info_download_failed)) + } } return if (infos.size > 0) { "$name\n${infos.joinToString(", ")}" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6bc8392..e2cd1a4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -156,6 +156,8 @@ deleted, link expired deleted, link expires %1$s download failed + download failed, link expired + download failed, link expires %1$s Notifications enabled diff --git a/fastlane/metadata/android/en-US/changelog/22.txt b/fastlane/metadata/android/en-US/changelog/22.txt index 188322a..b48eecd 100644 --- a/fastlane/metadata/android/en-US/changelog/22.txt +++ b/fastlane/metadata/android/en-US/changelog/22.txt @@ -1,3 +1,6 @@ Features: * Dark theme: Improvements around style and contrast (#119, thanks @kzshantonu for reporting) * Automatically delete notifications (#71, thanks @arjan-s for reporting) + +Bug fixes: +* Do not attempt to download attachments if they are already expired (#135)