Refactor backup creation failures, add case for file too large.

This commit is contained in:
Greyson Parrelli
2025-11-07 13:52:37 -05:00
committed by Michelle Tang
parent ad0b240550
commit 945453cb81
12 changed files with 154 additions and 177 deletions

View File

@@ -6,7 +6,6 @@ import androidx.lifecycle.map
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import org.thoughtcrime.securesms.backup.v2.BackupRepository
import org.thoughtcrime.securesms.components.settings.app.subscription.InAppDonations
import org.thoughtcrime.securesms.components.settings.app.subscription.RecurringInAppPaymentRepository
import org.thoughtcrime.securesms.conversationlist.model.UnreadPaymentsLiveData
@@ -72,18 +71,13 @@ class AppSettingsViewModel : ViewModel() {
}
private fun getBackupFailureState(): BackupFailureState {
return if (BackupRepository.shouldDisplayOutOfRemoteStorageSpaceUx()) {
BackupFailureState.OUT_OF_STORAGE_SPACE
} else if (BackupRepository.shouldDisplayBackupFailedSettingsRow()) {
BackupFailureState.BACKUP_FAILED
} else if (BackupRepository.shouldDisplayCouldNotCompleteBackupSettingsRow()) {
BackupFailureState.COULD_NOT_COMPLETE_BACKUP
} else if (SignalStore.backup.subscriptionStateMismatchDetected) {
BackupFailureState.SUBSCRIPTION_STATE_MISMATCH
} else if (SignalStore.backup.hasBackupAlreadyRedeemedError) {
BackupFailureState.ALREADY_REDEEMED
} else {
BackupFailureState.NONE
return when {
!SignalStore.account.isRegistered || !SignalStore.backup.areBackupsEnabled -> BackupFailureState.NONE
SignalStore.backup.isNotEnoughRemoteStorageSpace -> BackupFailureState.OUT_OF_STORAGE_SPACE
SignalStore.backup.hasBackupCreationError -> BackupFailureState.COULD_NOT_COMPLETE_BACKUP
SignalStore.backup.subscriptionStateMismatchDetected -> BackupFailureState.SUBSCRIPTION_STATE_MISMATCH
SignalStore.backup.hasBackupAlreadyRedeemedError -> BackupFailureState.ALREADY_REDEEMED
else -> BackupFailureState.NONE
}
}
}

View File

@@ -539,11 +539,10 @@ private fun RemoteBackupsSettingsContent(
contentCallbacks = contentCallbacks
)
} else {
if (state.showBackupCreateFailedError || state.showBackupCreateCouldNotCompleteError) {
if (state.backupCreationError != null) {
item {
BackupCreateErrorRow(
showCouldNotComplete = state.showBackupCreateCouldNotCompleteError,
showBackupFailed = state.showBackupCreateFailedError,
error = state.backupCreationError,
onLearnMoreClick = contentCallbacks::onLearnMoreAboutBackupFailure
)
}
@@ -888,11 +887,10 @@ private fun LazyListScope.appendBackupDetailsItems(
}
}
if (state.showBackupCreateFailedError || state.showBackupCreateCouldNotCompleteError) {
if (state.backupCreationError != null) {
item {
BackupCreateErrorRow(
showCouldNotComplete = state.showBackupCreateCouldNotCompleteError,
showBackupFailed = state.showBackupCreateFailedError,
error = state.backupCreationError,
onLearnMoreClick = contentCallbacks::onLearnMoreAboutBackupFailure
)
}

View File

@@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.components.settings.app.backups.remote
import org.signal.core.util.ByteSize
import org.thoughtcrime.securesms.backup.v2.MessageBackupTier
import org.thoughtcrime.securesms.components.settings.app.backups.BackupState
import org.thoughtcrime.securesms.keyvalue.BackupValues
/**
* @param includeDebuglog The state for whether or not we should include a debuglog in the backup. If `null`, hide the setting.
@@ -30,8 +31,7 @@ data class RemoteBackupsSettingsState(
val includeDebuglog: Boolean? = null,
val canBackupMessagesJobRun: Boolean = false,
val backupMediaDetails: BackupMediaDetails? = null,
val showBackupCreateFailedError: Boolean = false,
val showBackupCreateCouldNotCompleteError: Boolean = false,
val backupCreationError: BackupValues.BackupCreationError? = null,
val freeTierMediaRetentionDays: Int = -1,
val isGooglePlayServicesAvailable: Boolean = false
) {

View File

@@ -77,8 +77,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
canBackUpUsingCellular = SignalStore.backup.backupWithCellular,
canRestoreUsingCellular = SignalStore.backup.restoreWithCellular,
includeDebuglog = SignalStore.internal.includeDebuglogInBackup.takeIf { RemoteConfig.internalUser },
showBackupCreateFailedError = BackupRepository.shouldDisplayBackupFailedSettingsRow(),
showBackupCreateCouldNotCompleteError = BackupRepository.shouldDisplayCouldNotCompleteBackupSettingsRow()
backupCreationError = SignalStore.backup.backupCreationError
)
)
@@ -349,8 +348,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
canRestoreUsingCellular = SignalStore.backup.restoreWithCellular,
isOutOfStorageSpace = BackupRepository.shouldDisplayOutOfRemoteStorageSpaceUx(),
hasRedemptionError = lastPurchase?.data?.error?.data_ == "409",
showBackupCreateFailedError = BackupRepository.shouldDisplayBackupFailedSettingsRow(),
showBackupCreateCouldNotCompleteError = BackupRepository.shouldDisplayCouldNotCompleteBackupSettingsRow()
backupCreationError = SignalStore.backup.backupCreationError
)
}
}

View File

@@ -82,6 +82,7 @@ import org.thoughtcrime.securesms.jobs.ArchiveAttachmentReconciliationJob
import org.thoughtcrime.securesms.jobs.ArchiveThumbnailBackfillJob
import org.thoughtcrime.securesms.jobs.BackupRestoreMediaJob
import org.thoughtcrime.securesms.jobs.LocalBackupJob
import org.thoughtcrime.securesms.keyvalue.BackupValues
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.Util
@@ -561,10 +562,10 @@ fun Screen(
)
Rows.TextRow(
text = "Mark backup failure",
text = "Mark backup validation failure",
label = "This will display the error sheet when returning to the chats list.",
onClick = {
BackupRepository.markBackupFailure()
BackupRepository.markBackupCreationFailed(BackupValues.BackupCreationError.VALIDATION)
}
)