From f16e9a2920f5858aaa88bc736c12a6e1358e5215 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 26 Apr 2018 14:17:41 -0400 Subject: [PATCH] Fix issues in outgoing messages status changes. --- .../src/Messages/OWSMessageSender.m | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 22ee85b17..5f160b2c9 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -477,8 +477,19 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; // * The recipient was in the group when the message was first tried to be sent. // * The recipient is still in the group. // * The recipient is in the "sending" state. + + NSMutableSet *sendingRecipientIds = [NSMutableSet setWithArray:message.sendingRecipientIds]; + [sendingRecipientIds intersectSet:[NSSet setWithArray:gThread.groupModel.groupMemberIds]]; + [sendingRecipientIds minusSet:[NSSet setWithArray:self.blockingManager.blockedPhoneNumbers]]; + + // Mark skipped recipients as such. We skip because: + // + // * Recipient is no longer in the group. + // * Recipient is blocked. + // + // Elsewhere, we skip recipient if their Signal account has been deactivated. NSMutableSet *obsoleteRecipientIds = [NSMutableSet setWithArray:message.sendingRecipientIds]; - [obsoleteRecipientIds minusSet:[NSSet setWithArray:gThread.groupModel.groupMemberIds]]; + [obsoleteRecipientIds minusSet:sendingRecipientIds]; if (obsoleteRecipientIds.count > 0) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { for (NSString *recipientId in obsoleteRecipientIds) { @@ -488,10 +499,6 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; }]; } - NSMutableSet *sendingRecipientIds = [NSMutableSet setWithArray:message.sendingRecipientIds]; - [sendingRecipientIds intersectSet:[NSSet setWithArray:gThread.groupModel.groupMemberIds]]; - [sendingRecipientIds minusSet:[NSSet setWithArray:self.blockingManager.blockedPhoneNumbers]]; - NSError *error; NSArray *recipients = [self getRecipientsForRecipientIds:sendingRecipientIds.allObjects error:&error];