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

@@ -27,22 +27,22 @@ class LogSectionRemoteBackups : LogSection {
val output = StringBuilder()
output.append("-- Backup State\n")
output.append("Enabled: ${SignalStore.backup.areBackupsEnabled}\n")
output.append("Current tier: ${SignalStore.backup.backupTier}\n")
output.append("Latest tier: ${SignalStore.backup.latestBackupTier}\n")
output.append("Backup override tier: ${SignalStore.backup.backupTierInternalOverride}\n")
output.append("Last backup time: ${SignalStore.backup.lastBackupTime}\n")
output.append("Last check-in: ${SignalStore.backup.lastCheckInMillis}\n")
output.append("Last reconciliation time: ${SignalStore.backup.lastAttachmentReconciliationTime}\n")
output.append("Days since last backup: ${SignalStore.backup.daysSinceLastBackup}\n")
output.append("User manually skipped media restore: ${SignalStore.backup.userManuallySkippedMediaRestore}\n")
output.append("Can backup with cellular: ${SignalStore.backup.backupWithCellular}\n")
output.append("Has backup been uploaded: ${SignalStore.backup.hasBackupBeenUploaded}\n")
output.append("Has backup failure: ${SignalStore.backup.hasBackupFailure}\n")
output.append("Optimize storage: ${SignalStore.backup.optimizeStorage}\n")
output.append("Enabled : ${SignalStore.backup.areBackupsEnabled}\n")
output.append("Current tier : ${SignalStore.backup.backupTier}\n")
output.append("Latest tier : ${SignalStore.backup.latestBackupTier}\n")
output.append("Backup override tier : ${SignalStore.backup.backupTierInternalOverride}\n")
output.append("Last backup time : ${SignalStore.backup.lastBackupTime}\n")
output.append("Last check-in : ${SignalStore.backup.lastCheckInMillis}\n")
output.append("Last reconciliation time : ${SignalStore.backup.lastAttachmentReconciliationTime}\n")
output.append("Days since last backup : ${SignalStore.backup.daysSinceLastBackup}\n")
output.append("User manually skipped media restore : ${SignalStore.backup.userManuallySkippedMediaRestore}\n")
output.append("Can backup with cellular : ${SignalStore.backup.backupWithCellular}\n")
output.append("Has backup been uploaded : ${SignalStore.backup.hasBackupBeenUploaded}\n")
output.append("Backup failure state : ${SignalStore.backup.backupCreationError?.name ?: "None"}\n")
output.append("Optimize storage : ${SignalStore.backup.optimizeStorage}\n")
output.append("Detected subscription state mismatch: ${SignalStore.backup.subscriptionStateMismatchDetected}\n")
output.append("Last verified key time: ${SignalStore.backup.lastVerifyKeyTime}\n")
output.append("Restore state: ${ArchiveRestoreProgress.state}\n")
output.append("Last verified key time : ${SignalStore.backup.lastVerifyKeyTime}\n")
output.append("Restore state : ${ArchiveRestoreProgress.state}\n")
output.append("\n -- Subscription State\n")
val backupSubscriptionId = InAppPaymentsRepository.getSubscriber(InAppPaymentSubscriberRecord.Type.BACKUP)
@@ -50,21 +50,21 @@ class LogSectionRemoteBackups : LogSection {
val googlePlayServicesAvailability = GooglePlayServicesAvailability.fromCode(GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context))
val inAppPayment = SignalDatabase.inAppPayments.getLatestInAppPaymentByType(InAppPaymentType.RECURRING_BACKUP)
output.append("Has backup subscription id: ${backupSubscriptionId != null}\n")
output.append("Google Play Billing state: $googlePlayBillingAccess\n")
output.append("Google Play Services state: $googlePlayServicesAvailability\n\n")
output.append("Has backup subscription id : ${backupSubscriptionId != null}\n")
output.append("Google Play Billing state : $googlePlayBillingAccess\n")
output.append("Google Play Services state : $googlePlayServicesAvailability\n\n")
if (inAppPayment != null) {
output.append("IAP end of period (seconds): ${inAppPayment.endOfPeriodSeconds}\n")
output.append("IAP state: ${inAppPayment.state.name}\n")
output.append("IAP inserted at (seconds): ${inAppPayment.insertedAt.inWholeSeconds}\n")
output.append("IAP updated at (seconds): ${inAppPayment.updatedAt.inWholeSeconds}\n")
output.append("IAP notified flag: ${inAppPayment.notified}\n")
output.append("IAP level: ${inAppPayment.data.level}\n")
output.append("IAP redemption stage (or null): ${inAppPayment.data.redemption?.stage}\n")
output.append("IAP error type (or null): ${inAppPayment.data.error?.type}\n")
output.append("IAP end of period (seconds) : ${inAppPayment.endOfPeriodSeconds}\n")
output.append("IAP state : ${inAppPayment.state.name}\n")
output.append("IAP inserted at (seconds) : ${inAppPayment.insertedAt.inWholeSeconds}\n")
output.append("IAP updated at (seconds) : ${inAppPayment.updatedAt.inWholeSeconds}\n")
output.append("IAP notified flag : ${inAppPayment.notified}\n")
output.append("IAP level : ${inAppPayment.data.level}\n")
output.append("IAP redemption stage (or null) : ${inAppPayment.data.redemption?.stage}\n")
output.append("IAP error type (or null) : ${inAppPayment.data.error?.type}\n")
output.append("IAP cancellation reason (or null): ${inAppPayment.data.cancellation?.reason}\n")
output.append("IAP price: ${inAppPayment.data.amount?.toFiatMoney()?.let { FiatMoneyUtil.format(context.resources, it)} ?: "Not available" }\n")
output.append("IAP price : ${inAppPayment.data.amount?.toFiatMoney()?.let { FiatMoneyUtil.format(context.resources, it)} ?: "Not available" }\n")
} else {
output.append("No in-app payment data available.\n")
}
@@ -90,7 +90,7 @@ class LogSectionRemoteBackups : LogSection {
output.append(SignalStore.backup.archiveUploadState!!.toPrettyString())
if (SignalStore.backup.archiveUploadState!!.state !in setOf(ArchiveUploadProgressState.State.None, ArchiveUploadProgressState.State.UserCanceled)) {
output.append("Pending bytes: ${SignalDatabase.attachments.getPendingArchiveUploadBytes()}\n")
output.append("Pending bytes : ${SignalDatabase.attachments.getPendingArchiveUploadBytes()}\n")
}
} else {
output.append("None\n")
@@ -105,28 +105,28 @@ class LogSectionRemoteBackups : LogSection {
private fun ArchiveUploadProgressState.toPrettyString(): String {
return buildString {
appendLine("state: ${state.name}")
appendLine("backupPhase: ${backupPhase.name}")
appendLine("frameExportCount: $frameExportCount")
appendLine("frameTotalCount: $frameTotalCount")
appendLine("state : ${state.name}")
appendLine("backupPhase : ${backupPhase.name}")
appendLine("frameExportCount : $frameExportCount")
appendLine("frameTotalCount : $frameTotalCount")
appendLine("backupFileUploadedBytes: $backupFileUploadedBytes")
appendLine("backupFileTotalBytes: $backupFileTotalBytes")
appendLine("mediaUploadedBytes: $mediaUploadedBytes")
appendLine("mediaTotalBytes: $mediaTotalBytes")
appendLine("backupFileTotalBytes : $backupFileTotalBytes")
appendLine("mediaUploadedBytes : $mediaUploadedBytes")
appendLine("mediaTotalBytes : $mediaTotalBytes")
if (frameTotalCount > 0) {
val frameProgress = (frameExportCount.toDouble() / frameTotalCount * 100).toInt()
appendLine("Frame export progress: $frameProgress%")
appendLine("Frame export progress : $frameProgress%")
}
if (backupFileTotalBytes > 0) {
val backupFileProgress = (backupFileUploadedBytes.toDouble() / backupFileTotalBytes * 100).toInt()
appendLine("Backup file upload progress: $backupFileProgress%")
appendLine("Backup file upload progress : $backupFileProgress%")
}
if (mediaTotalBytes > 0) {
val mediaProgress = (mediaUploadedBytes.toDouble() / mediaTotalBytes * 100).toInt()
appendLine("Media upload progress: $mediaProgress%")
appendLine("Media upload progress : $mediaProgress%")
}
}
}