diff --git a/Signal/src/util/OWSBackupExportJob.m b/Signal/src/util/OWSBackupExportJob.m index 56cda6d6b..662d83ab6 100644 --- a/Signal/src/util/OWSBackupExportJob.m +++ b/Signal/src/util/OWSBackupExportJob.m @@ -817,6 +817,7 @@ NS_ASSUME_NONNULL_BEGIN backupFragment.recordName = recordName; backupFragment.encryptionKey = exportItem.encryptedItem.encryptionKey; backupFragment.relativeFilePath = attachmentExport.relativeFilePath; + backupFragment.attachmentId = attachmentExport.attachmentId; backupFragment.uncompressedDataLength = exportItem.uncompressedDataLength; [backupFragment save]; @@ -923,6 +924,10 @@ NS_ASSUME_NONNULL_BEGIN OWSAssert(item.attachmentExport.relativeFilePath.length > 0); itemJson[kOWSBackup_ManifestKey_RelativeFilePath] = item.attachmentExport.relativeFilePath; } + if (item.attachmentExport.attachmentId) { + OWSAssert(item.attachmentExport.attachmentId.length > 0); + itemJson[kOWSBackup_ManifestKey_AttachmentId] = item.attachmentExport.attachmentId; + } if (item.uncompressedDataLength) { itemJson[kOWSBackup_ManifestKey_DataSize] = item.uncompressedDataLength; } diff --git a/Signal/src/util/OWSBackupJob.h b/Signal/src/util/OWSBackupJob.h index 092854f3f..663ed9e5a 100644 --- a/Signal/src/util/OWSBackupJob.h +++ b/Signal/src/util/OWSBackupJob.h @@ -12,6 +12,7 @@ extern NSString *const kOWSBackup_ManifestKey_AttachmentFiles; extern NSString *const kOWSBackup_ManifestKey_RecordName; extern NSString *const kOWSBackup_ManifestKey_EncryptionKey; extern NSString *const kOWSBackup_ManifestKey_RelativeFilePath; +extern NSString *const kOWSBackup_ManifestKey_AttachmentId; extern NSString *const kOWSBackup_ManifestKey_DataSize; @class OWSBackupIO; diff --git a/Signal/src/util/OWSBackupJob.m b/Signal/src/util/OWSBackupJob.m index 0c6cdae3b..990cf0e30 100644 --- a/Signal/src/util/OWSBackupJob.m +++ b/Signal/src/util/OWSBackupJob.m @@ -16,6 +16,7 @@ NSString *const kOWSBackup_ManifestKey_AttachmentFiles = @"attachment_files"; NSString *const kOWSBackup_ManifestKey_RecordName = @"record_name"; NSString *const kOWSBackup_ManifestKey_EncryptionKey = @"encryption_key"; NSString *const kOWSBackup_ManifestKey_RelativeFilePath = @"relative_file_path"; +NSString *const kOWSBackup_ManifestKey_AttachmentId = @"attachment_id"; NSString *const kOWSBackup_ManifestKey_DataSize = @"data_size"; NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService"; @@ -257,6 +258,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService"; NSString *_Nullable recordName = itemMap[kOWSBackup_ManifestKey_RecordName]; NSString *_Nullable encryptionKeyString = itemMap[kOWSBackup_ManifestKey_EncryptionKey]; NSString *_Nullable relativeFilePath = itemMap[kOWSBackup_ManifestKey_RelativeFilePath]; + NSString *_Nullable attachmentId = itemMap[kOWSBackup_ManifestKey_AttachmentId]; NSNumber *_Nullable uncompressedDataLength = itemMap[kOWSBackup_ManifestKey_DataSize]; if (![recordName isKindOfClass:[NSString class]]) { OWSProdLogAndFail(@"%@ manifest has invalid recordName: %@.", self.logTag, key); @@ -271,6 +273,11 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService"; OWSProdLogAndFail(@"%@ manifest has invalid relativeFilePath: %@.", self.logTag, key); return nil; } + // attachmentId is an optional field. + if (attachmentId && ![attachmentId isKindOfClass:[NSString class]]) { + OWSProdLogAndFail(@"%@ manifest has invalid attachmentId: %@.", self.logTag, key); + return nil; + } NSData *_Nullable encryptionKey = [NSData dataFromBase64String:encryptionKeyString]; if (!encryptionKey) { OWSProdLogAndFail(@"%@ manifest has corrupt encryptionKey: %@.", self.logTag, key); @@ -286,6 +293,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService"; item.recordName = recordName; item.encryptionKey = encryptionKey; item.relativeFilePath = relativeFilePath; + item.attachmentId = attachmentId; item.uncompressedDataLength = uncompressedDataLength; [items addObject:item]; } diff --git a/SignalServiceKit/src/Util/OWSBackupFragment.h b/SignalServiceKit/src/Util/OWSBackupFragment.h index 7dece99be..6db141c00 100644 --- a/SignalServiceKit/src/Util/OWSBackupFragment.h +++ b/SignalServiceKit/src/Util/OWSBackupFragment.h @@ -28,6 +28,9 @@ NS_ASSUME_NONNULL_BEGIN // file should reside relative to the attachments folder. @property (nonatomic, nullable) NSString *relativeFilePath; +// This property is only set for attachments. +@property (nonatomic, nullable) NSString *attachmentId; + // This property is only set if the manifest item is downloaded. @property (nonatomic, nullable) NSString *downloadFilePath;