diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt index 4c732d27a6..bda906d2a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt @@ -25,8 +25,10 @@ class ArchivedAttachment : Attachment { constructor( contentType: String?, size: Long, - cdn: Cdn, - cdnKey: ByteArray, + cdn: Int, + key: ByteArray, + cdnKey: String?, + archiveCdn: Int?, archiveMediaName: String, archiveMediaId: String, digest: ByteArray, @@ -46,9 +48,9 @@ class ArchivedAttachment : Attachment { transferState = AttachmentTable.TRANSFER_NEEDS_RESTORE, size = size, fileName = null, - cdn = cdn, - remoteLocation = null, - remoteKey = Base64.encodeWithoutPadding(cdnKey), + cdn = Cdn.fromCdnNumber(cdn), + remoteLocation = cdnKey, + remoteKey = Base64.encodeWithoutPadding(key), remoteDigest = digest, incrementalDigest = incrementalMac, fastPreflightId = null, @@ -65,7 +67,7 @@ class ArchivedAttachment : Attachment { audioHash = null, transformProperties = null ) { - this.archiveCdn = cdn.cdnNumber + this.archiveCdn = archiveCdn ?: Cdn.CDN_3.cdnNumber this.archiveMediaName = archiveMediaName this.archiveMediaId = archiveMediaId } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt index 12337a2920..161fc3e9f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt @@ -618,8 +618,10 @@ class ChatItemImportInserter( return ArchivedAttachment( contentType = contentType, size = pointer.backupLocator.size.toLong(), - cdn = Cdn.fromCdnNumber(pointer.backupLocator.cdnNumber), - cdnKey = pointer.backupLocator.key.toByteArray(), + cdn = pointer.backupLocator.transitCdnNumber ?: Cdn.CDN_0.cdnNumber, + key = pointer.backupLocator.key.toByteArray(), + cdnKey = pointer.backupLocator.transitCdnKey, + archiveCdn = pointer.backupLocator.cdnNumber, archiveMediaName = pointer.backupLocator.mediaName, archiveMediaId = backupState.backupKey.deriveMediaId(MediaName(pointer.backupLocator.mediaName)).encode(), digest = pointer.backupLocator.digest.toByteArray(), diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index aa3208a861..f3a6c9213c 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -388,10 +388,16 @@ message FilePointer { // References attachments in the backup (media) storage tier. message BackupLocator { string mediaName = 1; - uint32 cdnNumber = 2; + // If present, the cdn number of the succesful upload. + // If empty/0, may still have been uploaded, and clients + // can discover the cdn number via the list endpoint. + optional uint32 cdnNumber = 2; bytes key = 3; bytes digest = 4; uint32 size = 5; + // Fallback in case backup tier upload failed. + optional string transitCdnKey = 6; + optional uint32 transitCdnNumber = 7; } // References attachments in the transit storage tier.