diff --git a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h index 4b614371f..d0b5047e8 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h @@ -38,6 +38,7 @@ extern NSString *const TSGroupThread_NotificationKey_UniqueId; - (BOOL)isLocalUserInGroup; - (BOOL)isLocalUserInGroupWithTransaction:(YapDatabaseReadTransaction *)transaction; +- (BOOL)isUserInGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction; // all group threads containing recipient as a member + (NSArray *)groupThreadsWithRecipientId:(NSString *)recipientId diff --git a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m index 5cd6125be..2ddaae043 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m @@ -204,6 +204,13 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific return [linkedDeviceHexEncodedPublicKeys intersectsSet:[NSSet setWithArray:self.groupModel.groupMemberIds]]; } +- (BOOL)isUserInGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction +{ + if (hexEncodedPublicKey == nil) { return NO; } + NSSet *linkedDeviceHexEncodedPublicKeys = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:hexEncodedPublicKey in:transaction]; + return [linkedDeviceHexEncodedPublicKeys intersectsSet:[NSSet setWithArray:self.groupModel.groupMemberIds]]; +} + - (NSString *)name { // TODO sometimes groupName is set to the empty string. I'm hesitent to change diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 1e74b6a54..089395b37 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1360,7 +1360,7 @@ NS_ASSUME_NONNULL_BEGIN } // Ensure sender is in the group. - if (![gThread.groupModel.groupMemberIds containsObject:envelope.source]) { + if (![gThread isUserInGroup:envelope.source transaction:transaction]) { OWSLogWarn(@"Ignoring 'Request Group Info' message for non-member of group. %@ not in %@", envelope.source, gThread.groupModel.groupMemberIds);