From ccf1be23595ba4cafad4a0e7eb3053813f31f22b Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 4 Sep 2025 12:19:21 -0400 Subject: [PATCH] Add failsafe for clearing abandoned backup progress. --- .../org/thoughtcrime/securesms/ApplicationContext.java | 2 +- .../thoughtcrime/securesms/backup/v2/BackupRepository.kt | 9 ++++++++- .../app/backups/remote/RemoteBackupsSettingsViewModel.kt | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 20cfdb8a91..a8a8667af1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -205,7 +205,7 @@ public class ApplicationContext extends Application implements AppForegroundObse .addNonBlocking(AppDependencies::getBillingApi) .addNonBlocking(this::ensureProfileUploaded) .addNonBlocking(() -> AppDependencies.getExpireStoriesManager().scheduleIfNecessary()) - .addNonBlocking(BackupRepository::maybeFixAnyDanglingAttachmentUploads) + .addNonBlocking(BackupRepository::maybeFixAnyDanglingUploadProgress) .addPostRender(() -> AppDependencies.getDeletedCallEventManager().scheduleIfNecessary()) .addPostRender(() -> RateLimitUtil.retryAllRateLimitedMessages(this)) .addPostRender(this::initializeExpiringMessageManager) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 1d5257ce5d..957b5042e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -116,6 +116,7 @@ import org.thoughtcrime.securesms.keyvalue.BackupValues.ArchiveServiceCredential import org.thoughtcrime.securesms.keyvalue.KeyValueStore import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.isDecisionPending +import org.thoughtcrime.securesms.keyvalue.protos.ArchiveUploadProgressState import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogRepository import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.notifications.NotificationChannels @@ -548,7 +549,13 @@ object BackupRepository { } @JvmStatic - fun maybeFixAnyDanglingAttachmentUploads() { + fun maybeFixAnyDanglingUploadProgress() { + if (SignalStore.backup.archiveUploadState?.backupPhase == ArchiveUploadProgressState.BackupPhase.Message && AppDependencies.jobManager.find { it.factoryKey == BackupMessagesJob.KEY }.isEmpty()) { + SignalStore.backup.archiveUploadState = null + BackupMessagesJob.enqueue() + return + } + if (!SignalStore.backup.backsUpMedia || !AppDependencies.jobManager.areQueuesEmpty(UploadAttachmentToArchiveJob.QUEUES)) { return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt index fc8c78b64d..f706ec41aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsViewModel.kt @@ -159,7 +159,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() { } viewModelScope.launch(Dispatchers.IO) { - BackupRepository.maybeFixAnyDanglingAttachmentUploads() + BackupRepository.maybeFixAnyDanglingUploadProgress() } }