Show sheet for validation error.

This commit is contained in:
Alex Hart
2025-10-17 14:21:38 -03:00
committed by Cody Henthorne
parent ea5a84b3dd
commit 7901cad90b
3 changed files with 8 additions and 1 deletions

View File

@@ -564,7 +564,7 @@ object BackupRepository {
return false
}
return !SignalStore.backup.hasBackupBeenUploaded && SignalStore.backup.hasBackupFailure && System.currentTimeMillis().milliseconds > SignalStore.backup.nextBackupFailureSheetSnoozeTime
return (!SignalStore.backup.hasBackupBeenUploaded || SignalStore.backup.hasValidationError) && SignalStore.backup.hasBackupFailure && System.currentTimeMillis().milliseconds > SignalStore.backup.nextBackupFailureSheetSnoozeTime
}
/**

View File

@@ -397,6 +397,7 @@ class BackupMessagesJob private constructor(
when (val result = ArchiveValidator.validateSignalBackup(tempBackupFile, backupKey, forwardSecrecyToken)) {
ArchiveValidator.ValidationResult.Success -> {
SignalStore.backup.hasValidationError = false
Log.d(TAG, "Successfully passed validation.", true)
}
@@ -407,6 +408,7 @@ class BackupMessagesJob private constructor(
is ArchiveValidator.ValidationResult.MessageValidationError -> {
Log.w(TAG, "The backup file fails validation! Message: ${result.exception.message}, Details: ${result.messageDetails}", true)
SignalStore.backup.hasValidationError = true
ArchiveUploadProgress.onValidationFailure()
return BackupFileResult.Failure
}
@@ -414,6 +416,7 @@ class BackupMessagesJob private constructor(
is ArchiveValidator.ValidationResult.RecipientDuplicateE164Error -> {
Log.w(TAG, "The backup file fails validation with a duplicate recipient! Message: ${result.exception.message}, Details: ${result.details}", true)
AppDependencies.jobManager.add(E164FormattingJob())
SignalStore.backup.hasValidationError = true
ArchiveUploadProgress.onValidationFailure()
return BackupFileResult.Failure
}

View File

@@ -77,6 +77,7 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) {
private const val KEY_NOT_ENOUGH_REMOTE_STORAGE_SPACE = "backup.not.enough.remote.storage.space"
private const val KEY_NOT_ENOUGH_REMOTE_STORAGE_SPACE_DISPLAY_SHEET = "backup.not.enough.remote.storage.space.display.sheet"
private const val KEY_MANUAL_NO_BACKUP_NOTIFIED = "backup.manual.no.backup.notified"
private const val KEY_VALIDATION_ERROR = "backup.validation.error"
private const val KEY_USER_MANUALLY_SKIPPED_MEDIA_RESTORE = "backup.user.manually.skipped.media.restore"
private const val KEY_BACKUP_EXPIRED_AND_DOWNGRADED = "backup.expired.and.downgraded"
@@ -300,6 +301,9 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) {
/** True if we believe we have successfully uploaded a backup, otherwise false. */
var hasBackupBeenUploaded: Boolean by booleanValue(KEY_BACKUP_UPLOADED, false)
/** Set when we fail to validate a user's backup during the export process */
var hasValidationError: Boolean by booleanValue(KEY_VALIDATION_ERROR, false)
val hasBackupFailure: Boolean get() = getBoolean(KEY_BACKUP_FAIL, false)
val nextBackupFailureSnoozeTime: Duration get() = getLong(KEY_BACKUP_FAIL_ACKNOWLEDGED_SNOOZE_TIME, 0L).milliseconds
val nextBackupFailureSheetSnoozeTime: Duration get() = getLong(KEY_BACKUP_FAIL_SHEET_SNOOZE_TIME, getNextBackupFailureSheetSnoozeTime(lastBackupTime.milliseconds).inWholeMilliseconds).milliseconds