From 556e13cc729c5c38ea0bd3447fa17e67a053e856 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 30 Jul 2021 10:44:48 +1000 Subject: [PATCH] Fix crash --- SignalUtilitiesKit/Messaging/OWSMessageUtils.m | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/SignalUtilitiesKit/Messaging/OWSMessageUtils.m b/SignalUtilitiesKit/Messaging/OWSMessageUtils.m index 09ab38cb6..9f7d6ea41 100644 --- a/SignalUtilitiesKit/Messaging/OWSMessageUtils.m +++ b/SignalUtilitiesKit/Messaging/OWSMessageUtils.m @@ -72,11 +72,13 @@ NS_ASSUME_NONNULL_BEGIN [LKStorage readWithBlock:^(YapDatabaseReadTransaction *transaction) { YapDatabaseViewTransaction *unreadMessages = [transaction ext:TSUnreadDatabaseViewExtensionName]; NSArray *allGroups = [unreadMessages allGroups]; + // FIXME: Confusingly, `allGroups` includes contact threads as well for (NSString *groupID in allGroups) { - TSGroupThread *thread = [TSGroupThread fetchObjectWithUniqueID:groupID transaction:transaction]; - if (thread.isMuted) continue; + TSThread *thread = [TSThread fetchObjectWithUniqueID:groupID transaction:transaction]; + if (thread.isMuted) { continue; } + BOOL isGroupThread = thread.isGroupThread; [unreadMessages enumerateKeysAndObjectsInGroup:groupID - usingBlock:^(NSString *collection, NSString *key, id object, NSUInteger index, BOOL *stop) { + usingBlock:^(NSString *collection, NSString *key, id object, NSUInteger index, BOOL *stop) { if (![object conformsToProtocol:@protocol(OWSReadTracking)]) { return; } @@ -85,9 +87,11 @@ NS_ASSUME_NONNULL_BEGIN NSLog(@"Found an already read message in the * unread * messages list."); return; } - TSIncomingMessage * incomingMessage = (TSIncomingMessage *)object; - if (incomingMessage != nil && thread.isOnlyNotifyingForMentions && !incomingMessage.isUserMentioned) { - return; + if ([object isKindOfClass:TSIncomingMessage.class] && isGroupThread) { + TSIncomingMessage *incomingMessage = (TSIncomingMessage *)object; + if (((TSGroupThread *)thread).isOnlyNotifyingForMentions && !incomingMessage.isUserMentioned) { + return; + } } count += 1; }];