diff --git a/src/Messages/Attachments/OWSAttachmentsProcessor.m b/src/Messages/Attachments/OWSAttachmentsProcessor.m index 3ca0748c6..720d32a10 100644 --- a/src/Messages/Attachments/OWSAttachmentsProcessor.m +++ b/src/Messages/Attachments/OWSAttachmentsProcessor.m @@ -331,7 +331,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)setAttachment:(TSAttachmentPointer *)pointer isDownloadingInMessage:(nullable TSMessage *)message { - pointer.downloading = YES; + pointer.state = TSAttachmentPointerStateDownloading; [pointer save]; if (message) { [message touch]; @@ -340,8 +340,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)setAttachment:(TSAttachmentPointer *)pointer didFailInMessage:(nullable TSMessage *)message { - pointer.downloading = NO; - pointer.failed = YES; + pointer.state = TSAttachmentPointerStateFailed; [pointer save]; if (message) { [message touch]; diff --git a/src/Messages/Attachments/TSAttachment.h b/src/Messages/Attachments/TSAttachment.h index 537ae0a33..9fd8d3f29 100644 --- a/src/Messages/Attachments/TSAttachment.h +++ b/src/Messages/Attachments/TSAttachment.h @@ -39,6 +39,8 @@ NS_ASSUME_NONNULL_BEGIN // that represent downloaded incoming attachments. - (instancetype)initWithPointer:(TSAttachment *)pointer; +- (nullable instancetype)initWithCoder:(NSCoder *)coder; + - (void)upgradeFromAttachmentSchemaVersion:(NSUInteger)attachmentSchemaVersion; @end diff --git a/src/Messages/Attachments/TSAttachmentPointer.h b/src/Messages/Attachments/TSAttachmentPointer.h index a6a825b5c..cb8143fdb 100644 --- a/src/Messages/Attachments/TSAttachmentPointer.h +++ b/src/Messages/Attachments/TSAttachmentPointer.h @@ -6,6 +6,12 @@ NS_ASSUME_NONNULL_BEGIN +typedef NS_ENUM(NSUInteger, TSAttachmentPointerState) { + TSAttachmentPointerStateEnqueued = 0, + TSAttachmentPointerStateDownloading = 1, + TSAttachmentPointerStateFailed = 2, +}; + /** * A TSAttachmentPointer is a yet-to-be-downloaded attachment. */ @@ -18,8 +24,7 @@ NS_ASSUME_NONNULL_BEGIN relay:(NSString *)relay NS_DESIGNATED_INITIALIZER; @property (nonatomic, readonly) NSString *relay; -@property (atomic, readwrite, getter=isDownloading) BOOL downloading; -@property (atomic, readwrite, getter=hasFailed) BOOL failed; +@property (atomic) TSAttachmentPointerState state; // Though now required, `digest` may be null for pre-existing records or from // messages received from other clients diff --git a/src/Messages/Attachments/TSAttachmentPointer.m b/src/Messages/Attachments/TSAttachmentPointer.m index 40a930830..73ca07a53 100644 --- a/src/Messages/Attachments/TSAttachmentPointer.m +++ b/src/Messages/Attachments/TSAttachmentPointer.m @@ -8,6 +8,23 @@ NS_ASSUME_NONNULL_BEGIN @implementation TSAttachmentPointer +- (nullable instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + if (!self) { + return self; + } + + // A TSAttachmentPointer is a yet-to-be-downloaded attachment. + // If this is an old TSAttachmentPointer from another session, + // we know that it failed to complete before the session completed. + if (![coder containsValueForKey:@"state"]) { + _state = TSAttachmentPointerStateFailed; + } + + return self; +} + - (instancetype)initWithServerId:(UInt64)serverId key:(NSData *)key digest:(nullable NSData *)digest @@ -20,8 +37,7 @@ NS_ASSUME_NONNULL_BEGIN } _digest = digest; - _failed = NO; - _downloading = NO; + _state = TSAttachmentPointerStateEnqueued; _relay = relay; return self; diff --git a/src/Messages/OWSFailedMessagesJob.m b/src/Messages/OWSFailedMessagesJob.m index d787961e9..b296cb59d 100644 --- a/src/Messages/OWSFailedMessagesJob.m +++ b/src/Messages/OWSFailedMessagesJob.m @@ -21,6 +21,8 @@ static NSString *const OWSFailedMessagesJobMessageStateIndex = @"index_outoing_m @end +#pragma mark - + @implementation OWSFailedMessagesJob - (instancetype)initWithStorageManager:(TSStorageManager *)storageManager