#import #import NS_ASSUME_NONNULL_BEGIN @class OWSBackupFragment; @class SNProtoAttachmentPointer; @class TSAttachmentStream; @class TSMessage; typedef NS_ENUM(NSUInteger, TSAttachmentPointerType) { TSAttachmentPointerTypeUnknown = 0, TSAttachmentPointerTypeIncoming = 1, TSAttachmentPointerTypeRestoring = 2, }; typedef NS_ENUM(NSUInteger, TSAttachmentPointerState) { TSAttachmentPointerStateEnqueued = 0, TSAttachmentPointerStateDownloading = 1, TSAttachmentPointerStateFailed = 2, }; /** * A TSAttachmentPointer is a yet-to-be-downloaded attachment. */ @interface TSAttachmentPointer : TSAttachment @property (nonatomic) TSAttachmentPointerType pointerType; @property (atomic) TSAttachmentPointerState state; @property (nullable, atomic) NSString *mostRecentFailureLocalizedText; // Though now required, `digest` may be null for pre-existing records or from // messages received from other clients @property (nullable, nonatomic, readonly) NSData *digest; @property (nonatomic, readonly) CGSize mediaSize; // Optional property. Only set for attachments which need "lazy backup restore." @property (nonatomic, nullable) NSString *lazyRestoreFragmentId; - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; - (instancetype)initWithServerId:(UInt64)serverId key:(nullable NSData *)key digest:(nullable NSData *)digest byteCount:(UInt32)byteCount contentType:(NSString *)contentType sourceFilename:(nullable NSString *)sourceFilename caption:(nullable NSString *)caption albumMessageId:(nullable NSString *)albumMessageId attachmentType:(TSAttachmentType)attachmentType mediaSize:(CGSize)mediaSize NS_DESIGNATED_INITIALIZER; - (instancetype)initForRestoreWithAttachmentStream:(TSAttachmentStream *)attachmentStream NS_DESIGNATED_INITIALIZER; + (nullable TSAttachmentPointer *)attachmentPointerFromProto:(SNProtoAttachmentPointer *)attachmentProto albumMessage:(nullable TSMessage *)message; + (NSArray *)attachmentPointersFromProtos: (NSArray *)attachmentProtos albumMessage:(TSMessage *)message; // Non-nil for attachments which need "lazy backup restore." - (nullable OWSBackupFragment *)lazyRestoreFragment; // Marks attachment as needing "lazy backup restore." - (void)markForLazyRestoreWithFragment:(OWSBackupFragment *)lazyRestoreFragment transaction:(YapDatabaseReadWriteTransaction *)transaction; @end NS_ASSUME_NONNULL_END