diff --git a/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.h b/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.h index c6042c8e0..1a51727db 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.h +++ b/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.h @@ -98,6 +98,9 @@ NS_ASSUME_NONNULL_BEGIN - (nullable NSString *)thumbnailAttachmentStreamId; - (void)setThumbnailAttachmentStream:(TSAttachment *)thumbnailAttachmentStream; +// currently only used by orphan attachment cleaner +- (NSArray *)thumbnailAttachmentStreamIds; + @property (atomic, readonly) NSArray *quotedAttachments; // Before sending, persist a thumbnail attachment derived from the quoted attachment diff --git a/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.m b/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.m index 87f5dae03..227a8a0c3 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSQuotedMessage.m @@ -200,18 +200,18 @@ NS_ASSUME_NONNULL_BEGIN return firstAttachment.sourceFilename; } -- (nullable NSString *)thumbnailAttachmentStreamId +- (nullable NSString *)thumbnailAttachmentPointerId { OWSAttachmentInfo *firstAttachment = self.firstAttachmentInfo; - return firstAttachment.thumbnailAttachmentStreamId; + return firstAttachment.thumbnailAttachmentPointerId; } -- (nullable NSString *)thumbnailAttachmentPointerId +- (nullable NSString *)thumbnailAttachmentStreamId { OWSAttachmentInfo *firstAttachment = self.firstAttachmentInfo; - return firstAttachment.thumbnailAttachmentPointerId; + return firstAttachment.thumbnailAttachmentStreamId; } - (void)setThumbnailAttachmentStream:(TSAttachmentStream *)attachmentStream @@ -223,6 +223,18 @@ NS_ASSUME_NONNULL_BEGIN firstAttachment.thumbnailAttachmentStreamId = attachmentStream.uniqueId; } +- (NSArray *)thumbnailAttachmentStreamIds +{ + NSMutableArray *streamIds = [NSMutableArray new]; + for (OWSAttachmentInfo *info in self.quotedAttachments) { + if (info.thumbnailAttachmentStreamId) { + [streamIds addObject:info.thumbnailAttachmentStreamId]; + } + } + + return [streamIds copy]; +} + - (NSArray *)createThumbnailAttachmentsIfNecessaryWithTransaction: (YapDatabaseReadWriteTransaction *)transaction { diff --git a/SignalServiceKit/src/Storage/OWSOrphanedDataCleaner.m b/SignalServiceKit/src/Storage/OWSOrphanedDataCleaner.m index 19254a240..2d0b79539 100644 --- a/SignalServiceKit/src/Storage/OWSOrphanedDataCleaner.m +++ b/SignalServiceKit/src/Storage/OWSOrphanedDataCleaner.m @@ -8,6 +8,7 @@ #import "TSAttachmentStream.h" #import "TSInteraction.h" #import "TSMessage.h" +#import "TSQuotedMessage.h" #import "TSThread.h" #import @@ -104,6 +105,8 @@ NS_ASSUME_NONNULL_BEGIN NSMutableSet *orphanInteractionIds = [NSMutableSet new]; NSMutableSet *messageAttachmentIds = [NSMutableSet new]; + NSMutableSet *quotedReplyThumbnailAttachmentIds = [NSMutableSet new]; + [databaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { [transaction enumerateKeysAndObjectsInCollection:TSMessage.collection usingBlock:^(NSString *key, TSInteraction *interaction, BOOL *stop) { @@ -114,18 +117,28 @@ NS_ASSUME_NONNULL_BEGIN if (![interaction isKindOfClass:[TSMessage class]]) { return; } + TSMessage *message = (TSMessage *)interaction; if (message.attachmentIds.count > 0) { [messageAttachmentIds addObjectsFromArray:message.attachmentIds]; } + + TSQuotedMessage *_Nullable quotedMessage = message.quotedMessage; + if (quotedMessage) { + [quotedReplyThumbnailAttachmentIds + addObjectsFromArray:quotedMessage + .thumbnailAttachmentStreamIds]; + } }]; }]; CleanupLogDebug(@"%@ attachmentIds: %zd", self.logTag, attachmentIds.count); CleanupLogDebug(@"%@ messageAttachmentIds: %zd", self.logTag, messageAttachmentIds.count); + CleanupLogDebug(@"%@ quotedReplyThumbnailAttachmentIds: %zd", self.logTag, quotedReplyThumbnailAttachmentIds.count); NSMutableSet *orphanAttachmentIds = [attachmentIds mutableCopy]; [orphanAttachmentIds minusSet:messageAttachmentIds]; + [orphanAttachmentIds minusSet:quotedReplyThumbnailAttachmentIds]; NSMutableSet *missingAttachmentIds = [messageAttachmentIds mutableCopy]; [missingAttachmentIds minusSet:attachmentIds];