Prevent backup from being triggered while a restore is in progress.

This commit is contained in:
jeffrey-signal
2025-06-20 16:28:00 -04:00
committed by Cody Henthorne
parent 18f7a88d66
commit 79de5f733f

View File

@@ -10,6 +10,7 @@ import org.signal.core.util.isNotNullOrBlank
import org.signal.core.util.logging.Log
import org.signal.protos.resumableuploads.ResumableUpload
import org.thoughtcrime.securesms.backup.ArchiveUploadProgress
import org.thoughtcrime.securesms.backup.RestoreState
import org.thoughtcrime.securesms.backup.v2.ArchiveMediaItemIterator
import org.thoughtcrime.securesms.backup.v2.ArchiveValidator
import org.thoughtcrime.securesms.backup.v2.BackupRepository
@@ -21,6 +22,7 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.jobmanager.impl.WifiConstraint
import org.thoughtcrime.securesms.jobs.protos.BackupMessagesJobData
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.keyvalue.isDecisionPending
import org.thoughtcrime.securesms.providers.BlobProvider
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.storage.StorageSyncHelper
@@ -51,7 +53,33 @@ class BackupMessagesJob private constructor(
const val KEY = "BackupMessagesJob"
private fun isBackupAllowed(): Boolean {
return when {
SignalStore.registration.restoreDecisionState.isDecisionPending -> {
Log.i(TAG, "Backup not allowed: a restore decision is pending.")
false
}
SignalStore.backup.restoreState == RestoreState.PENDING -> {
Log.i(TAG, "Backup not allowed: a restore is pending.")
false
}
SignalStore.backup.restoreState == RestoreState.RESTORING_DB -> {
Log.i(TAG, "Backup not allowed: a restore is in progress.")
false
}
else -> true
}
}
fun enqueue() {
if (!isBackupAllowed()) {
Log.d(TAG, "Skip enqueueing BackupMessagesJob.")
return
}
val jobManager = AppDependencies.jobManager
val chain = jobManager.startChain(BackupMessagesJob())
@@ -97,6 +125,11 @@ class BackupMessagesJob private constructor(
}
override fun run(): Result {
if (!isBackupAllowed()) {
Log.d(TAG, "Skip running BackupMessagesJob.")
return Result.success()
}
val stopwatch = Stopwatch("BackupMessagesJob")
SignalDatabase.attachments.createKeyIvDigestForAttachmentsThatNeedArchiveUpload().takeIf { it > 0 }?.let { count -> Log.w(TAG, "Needed to create $count key/iv/digests.") }