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 8159c4263e..b274a1d8bc 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 @@ -1353,17 +1353,6 @@ object BackupRepository { } } - fun uploadBackupFile( - resumableSpec: ResumableMessagesBackupUploadSpec, - backupStream: InputStream, - backupStreamLength: Long, - progressListener: ProgressListener? = null - ): NetworkResult { - val (form, resumableUploadUrl) = resumableSpec - return SignalNetwork.archive.uploadBackupFile(form, resumableUploadUrl, backupStream, backupStreamLength, progressListener) - .also { Log.i(TAG, "UploadBackupFileResult: ${it::class.simpleName}") } - } - fun downloadBackupFile(destination: File, listener: ProgressListener? = null): NetworkResult { return initBackupAndFetchAuth() .then { credential -> 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 ec82efbe76..a2a0874c9d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt @@ -22,6 +22,7 @@ import org.thoughtcrime.securesms.jobmanager.impl.BackupMessagesConstraint import org.thoughtcrime.securesms.jobs.protos.BackupMessagesJobData import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.isDecisionPending +import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.storage.StorageSyncHelper @@ -196,8 +197,16 @@ class BackupMessagesJob private constructor( override fun shouldCancel(): Boolean = isCanceled } - FileInputStream(tempBackupFile).use { - when (val result = BackupRepository.uploadBackupFile(backupSpec, it, tempBackupFile.length(), progressListener)) { + FileInputStream(tempBackupFile).use { fileStream -> + val uploadResult = SignalNetwork.archive.uploadBackupFile( + uploadForm = backupSpec.attachmentUploadForm, + resumableUploadUrl = backupSpec.resumableUri, + data = fileStream, + dataLength = tempBackupFile.length(), + progressListener = progressListener + ) + + when (uploadResult) { is NetworkResult.Success -> { Log.i(TAG, "Successfully uploaded backup file.") if (!SignalStore.backup.hasBackupBeenUploaded) { @@ -209,7 +218,7 @@ class BackupMessagesJob private constructor( } is NetworkResult.NetworkError -> { - Log.i(TAG, "Network failure", result.getCause()) + Log.i(TAG, "Network failure", uploadResult.getCause()) return if (isCanceled) { Result.failure() } else { @@ -218,11 +227,17 @@ class BackupMessagesJob private constructor( } is NetworkResult.StatusCodeError -> { - Log.i(TAG, "Status code failure", result.getCause()) + Log.i(TAG, "Status code failure", uploadResult.getCause()) + when (uploadResult.code) { + 400 -> { + Log.w(TAG, "400 likely means bad resumable state. Resetting the upload spec before retrying.") + resumableMessagesBackupUploadSpec = null + } + } return Result.retry(defaultBackoff()) } - is NetworkResult.ApplicationError -> throw result.throwable + is NetworkResult.ApplicationError -> throw uploadResult.throwable } } stopwatch.split("upload")