From 1166b99d01d841f715d8cd11e87b0623d17f53c6 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 3 Sep 2025 11:41:57 -0400 Subject: [PATCH] Add backupVersion to RegistrationProvisioning.proto --- .../org/thoughtcrime/securesms/backup/v2/BackupRepository.kt | 2 +- .../java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt | 1 + .../java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt | 4 ++++ .../registrationv3/data/QuickRegistrationRepository.kt | 3 ++- .../src/main/protowire/RegistrationProvisioning.proto | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) 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 0c0ac18812..6d592af935 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 @@ -179,7 +179,7 @@ import kotlin.time.Duration.Companion.seconds object BackupRepository { private val TAG = Log.tag(BackupRepository::class.java) - private const val VERSION = 1L + const val VERSION = 1L private const val REMOTE_MAIN_DB_SNAPSHOT_NAME = "remote-signal-snapshot" private const val REMOTE_KEYVALUE_DB_SNAPSHOT_NAME = "remote-signal-key-value-snapshot" private const val LOCAL_MAIN_DB_SNAPSHOT_NAME = "local-signal-snapshot" diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt index 4bff098e29..48d7fc3b84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt @@ -212,6 +212,7 @@ class BackupMessagesJob private constructor( } ArchiveUploadProgress.onMessageBackupCreated(tempBackupFile.length()) + SignalStore.backup.lastBackupProtoVersion = BackupRepository.VERSION this.syncTime = currentTime this.dataFile = tempBackupFile.path diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt index 329452421f..8ebec2ebfc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/BackupValues.kt @@ -54,6 +54,7 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) { private const val KEY_LAST_ATTACHMENT_RECONCILIATION_TIME = "backup.lastBackupMediaSyncTime" private const val KEY_TOTAL_RESTORABLE_ATTACHMENT_SIZE = "backup.totalRestorableAttachmentSize" private const val KEY_BACKUP_FREQUENCY = "backup.backupFrequency" + private const val KEY_LAST_BACKUP_PROTO_VERSION = "backup.lastBackupProtoVersion" private const val KEY_CDN_MEDIA_PATH = "backup.cdn.mediaPath" @@ -147,6 +148,9 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) { clearMessageBackupFailureSheetWatermark() } + /** The version of the backup file we last successfully made. */ + var lastBackupProtoVersion: Long by longValue(KEY_LAST_BACKUP_PROTO_VERSION, -1) + val daysSinceLastBackup: Int get() = (System.currentTimeMillis().milliseconds - lastBackupTime.milliseconds).inWholeDays.toInt() var lastAttachmentReconciliationTime: Long by longValue(KEY_LAST_ATTACHMENT_RECONCILIATION_TIME, -1) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt index 9cace65a79..f9d1226cb2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt @@ -92,7 +92,8 @@ object QuickRegistrationRepository { aciIdentityKeyPublic = SignalStore.account.aciIdentityKey.publicKey.serialize().toByteString(), aciIdentityKeyPrivate = SignalStore.account.aciIdentityKey.privateKey.serialize().toByteString(), pniIdentityKeyPublic = SignalStore.account.pniIdentityKey.publicKey.serialize().toByteString(), - pniIdentityKeyPrivate = SignalStore.account.pniIdentityKey.privateKey.serialize().toByteString() + pniIdentityKeyPrivate = SignalStore.account.pniIdentityKey.privateKey.serialize().toByteString(), + backupVersion = SignalStore.backup.lastBackupProtoVersion ) ) .successOrThrow() diff --git a/libsignal-service/src/main/protowire/RegistrationProvisioning.proto b/libsignal-service/src/main/protowire/RegistrationProvisioning.proto index fac376e606..6f6ab7cd76 100644 --- a/libsignal-service/src/main/protowire/RegistrationProvisioning.proto +++ b/libsignal-service/src/main/protowire/RegistrationProvisioning.proto @@ -32,4 +32,5 @@ message RegistrationProvisionMessage { bytes aciIdentityKeyPrivate = 11; bytes pniIdentityKeyPublic = 12; bytes pniIdentityKeyPrivate = 13; + uint64 backupVersion = 14; }