diff --git a/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage.m index c5c3e4182..f2f14746e 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage.m @@ -7,6 +7,7 @@ #import "OWSDisappearingMessagesConfiguration.h" #import "OWSDisappearingMessagesJob.h" #import "OWSReadReceiptManager.h" +#import "TSAttachmentPointer.h" #import "TSContactThread.h" #import "TSDatabaseSecondaryIndexes.h" #import "TSGroupThread.h" @@ -126,6 +127,18 @@ NS_ASSUME_NONNULL_BEGIN return OWSInteractionType_IncomingMessage; } +- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction +{ + for (NSString *attachmentId in self.attachmentIds) { + TSAttachment *_Nullable attachment = + [TSAttachment fetchObjectWithUniqueID:attachmentId transaction:transaction]; + if ([attachment isKindOfClass:[TSAttachmentPointer class]]) { + return NO; + } + } + return self.isExpiringMessage; +} + #pragma mark - OWSReadTracking - (BOOL)shouldAffectUnreadCounts diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.h b/SignalServiceKit/src/Messages/Interactions/TSMessage.h index eef1f26fd..68b88b19d 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.h +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.h @@ -20,7 +20,6 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) uint64_t expireStartedAt; @property (nonatomic, readonly) uint64_t expiresAt; @property (nonatomic, readonly) BOOL isExpiringMessage; -@property (nonatomic, readonly) BOOL shouldStartExpireTimer; - (instancetype)initWithTimestamp:(uint64_t)timestamp; @@ -51,8 +50,12 @@ NS_ASSUME_NONNULL_BEGIN - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; - (BOOL)hasAttachments; + - (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction; +- (BOOL)shouldStartExpireTimer; +- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction; + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.m b/SignalServiceKit/src/Messages/Interactions/TSMessage.m index 8a66bebcd..e82119fed 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.m @@ -170,6 +170,15 @@ static const NSUInteger OWSMessageSchemaVersion = 3; } - (BOOL)shouldStartExpireTimer +{ + __block BOOL result; + [self.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + result = [self shouldStartExpireTimer:transaction]; + }]; + return result; +} + +- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction { return self.isExpiringMessage; } diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m index 0fc12dade..936ac699a 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.m @@ -213,7 +213,7 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec return self.thread.contactIdentifier; } -- (BOOL)shouldStartExpireTimer +- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction { switch (self.messageState) { case TSOutgoingMessageStateSentToService: diff --git a/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m b/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m index 67ae4c111..c80c07649 100644 --- a/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m +++ b/SignalServiceKit/src/Messages/OWSDisappearingMessagesFinder.m @@ -177,7 +177,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess } TSMessage *message = (TSMessage *)object; - if (!message.shouldStartExpireTimer) { + if (![message shouldStartExpireTimer:transaction]) { return; }