diff --git a/src/Contacts/TSThread.m b/src/Contacts/TSThread.m index 09965bc52..fb0e55d2e 100644 --- a/src/Contacts/TSThread.m +++ b/src/Contacts/TSThread.m @@ -6,6 +6,7 @@ #import "OWSReadTracking.h" #import "TSDatabaseView.h" #import "TSIncomingMessage.h" +#import "TSInfoMessage.h" #import "TSInteraction.h" #import "TSInvalidIdentityKeyReceivingErrorMessage.h" #import "TSOutgoingMessage.h" @@ -266,6 +267,17 @@ NS_ASSUME_NONNULL_BEGIN } - (void)updateWithLastMessage:(TSInteraction *)lastMessage transaction:(YapDatabaseReadWriteTransaction *)transaction { + OWSAssert(lastMessage); + OWSAssert(transaction); + + if (lastMessage.isDynamicInteraction) { + DDLogDebug(@"%@ not updating lastMessage for thread: %@ dynamic interaction: %@", + self.tag, + self, + lastMessage.debugDescription); + return; + } + NSDate *lastMessageDate = [lastMessage dateForSorting]; if ([lastMessage isKindOfClass:[TSErrorMessage class]]) { @@ -273,12 +285,21 @@ NS_ASSUME_NONNULL_BEGIN if (errorMessage.errorType == TSErrorMessageNonBlockingIdentityChange) { // Otherwise all group threads with the recipient will percolate to the top of the inbox, even though // there was no meaningful interaction. - DDLogDebug(@"%@ not updating lastMessage for thread:%@ nonblocking identity change: %@", + DDLogDebug(@"%@ not updating lastMessage for thread: %@ nonblocking identity change: %@", self.tag, self, errorMessage.debugDescription); return; } + } else if ([lastMessage isKindOfClass:[TSInfoMessage class]]) { + TSInfoMessage *infoMessage = (TSInfoMessage *)lastMessage; + if (infoMessage.messageType == TSInfoMessageVerificationStateChange) { + DDLogDebug(@"%@ not updating lastMessage for thread: %@ verification state change: %@", + self.tag, + self, + infoMessage.debugDescription); + return; + } } if (!_lastMessageDate || [lastMessageDate timeIntervalSinceDate:self.lastMessageDate] > 0) {