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 47dc81550a..c83df3591b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt @@ -54,6 +54,7 @@ import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.messages.AttachmentTransferProgress import org.whispersystems.signalservice.api.messages.SignalServiceAttachment +import org.whispersystems.signalservice.api.push.exceptions.ResumeLocationInvalidException import org.whispersystems.signalservice.api.svr.SvrBApi import org.whispersystems.signalservice.internal.push.AttachmentUploadForm import java.io.File @@ -367,6 +368,10 @@ class BackupMessagesJob private constructor( is NetworkResult.Success -> Unit is NetworkResult.NetworkError -> { Log.i(TAG, "Network failure", uploadResult.getCause(), true) + if (uploadResult.exception is ResumeLocationInvalidException) { + Log.w(TAG, "Resume location is invalid. Clearing upload spec before retrying.") + resumableMessagesBackupUploadSpec = null + } return if (isCanceled) Result.failure() else Result.retry(defaultBackoff()) } is NetworkResult.StatusCodeError -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/UploadAttachmentToArchiveJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/UploadAttachmentToArchiveJob.kt index 38a1393578..ffc71ef8b5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/UploadAttachmentToArchiveJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/UploadAttachmentToArchiveJob.kt @@ -38,6 +38,7 @@ import org.whispersystems.signalservice.api.archive.ArchiveMediaUploadFormStatus import org.whispersystems.signalservice.api.attachment.AttachmentUploadResult import org.whispersystems.signalservice.api.messages.AttachmentTransferProgress import org.whispersystems.signalservice.api.messages.SignalServiceAttachment +import org.whispersystems.signalservice.api.push.exceptions.ResumeLocationInvalidException import org.whispersystems.signalservice.internal.push.AttachmentUploadForm import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec import java.io.FileNotFoundException @@ -318,7 +319,10 @@ class UploadAttachmentToArchiveJob private constructor( is NetworkResult.NetworkError -> { Log.w(TAG, "[$attachmentId]$mediaIdLog Failed to upload due to network error.", result.exception) - if (result.exception.cause is ProtocolException) { + if (result.exception is ResumeLocationInvalidException) { + Log.w(TAG, "[$attachmentId]$mediaIdLog Resume location is invalid. Clearing upload spec before retrying.") + uploadSpec = null + } else if (result.exception.cause is ProtocolException) { Log.w(TAG, "[$attachmentId]$mediaIdLog Length may be incorrect. Recalculating.", result.exception) val actualLength = SignalDatabase.attachments.getAttachmentStream(attachmentId, 0)