From 872c7c5ce280fd31cf7a98c5cd965168f57d5fb2 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 20 Nov 2025 14:15:45 -0500 Subject: [PATCH] Optimize more during low disk situations. --- .../securesms/database/AttachmentTable.kt | 4 ++-- .../thoughtcrime/securesms/jobs/OptimizeMediaJob.kt | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt index bf587ff55b..5031ced585 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt @@ -1112,7 +1112,7 @@ class AttachmentTable( * Marking offloaded only clears the strong references to the on disk file and clears other local file data like hashes. * Another operation must run to actually delete the data from disk. See [deleteAbandonedAttachmentFiles]. */ - fun markEligibleAttachmentsAsOptimized() { + fun markEligibleAttachmentsAsOptimized(minimumAge: Duration = 30.days) { val now = System.currentTimeMillis() val subSelect = """ @@ -1136,7 +1136,7 @@ class AttachmentTable( ) AND ( - ${MessageTable.TABLE_NAME}.${MessageTable.DATE_RECEIVED} < ${now - 30.days.inWholeMilliseconds} + ${MessageTable.TABLE_NAME}.${MessageTable.DATE_RECEIVED} < ${now - minimumAge.inWholeMilliseconds} ) """ diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMediaJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMediaJob.kt index 89778c9d8a..fd90bc0b25 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMediaJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMediaJob.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.jobs +import org.signal.core.util.DiskUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies @@ -51,7 +52,16 @@ class OptimizeMediaJob private constructor(parameters: Parameters) : Job(paramet RestoreAttachmentJob.Queues.OFFLOAD_RESTORE.forEach { queue -> AppDependencies.jobManager.add(CheckRestoreMediaLeftJob(queue)) } Log.i(TAG, "Optimizing media in the db") - SignalDatabase.attachments.markEligibleAttachmentsAsOptimized() + + val available = DiskUtil.getAvailableSpace(context).bytes.toFloat() + val total = DiskUtil.getTotalDiskSize(context).bytes.toFloat() + val remaining = (total - available) / total * 100 + + val minimumAge = if (remaining > 5f) 30.days else 15.days + + Log.i(TAG, "${"%.1f".format(remaining)}% storage available, not optimizing the last $minimumAge of attachments") + + SignalDatabase.attachments.markEligibleAttachmentsAsOptimized(minimumAge) Log.i(TAG, "Deleting abandoned attachment files") val count = SignalDatabase.attachments.deleteAbandonedAttachmentFiles()