From f1b4bd772c5d4d2fdcd222ff81fe7e5f108a3125 Mon Sep 17 00:00:00 2001 From: Thomas Guillet Date: Tue, 15 Nov 2016 11:15:51 +0100 Subject: [PATCH] Prevent bogus message emission on group deletion Only send a message if the local number is part of the group * Fix error on empty group #1449 * Fix an unlogged issue about notification sent to group members even is the local user already quit the group --- .../view controllers/SignalsViewController.m | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/Signal/src/view controllers/SignalsViewController.m b/Signal/src/view controllers/SignalsViewController.m index 31123ffc9..15be7979a 100644 --- a/Signal/src/view controllers/SignalsViewController.m +++ b/Signal/src/view controllers/SignalsViewController.m @@ -332,32 +332,38 @@ - (void)tableViewCellTappedDelete:(NSIndexPath *)indexPath { TSThread *thread = [self threadForIndexPath:indexPath]; if ([thread isKindOfClass:[TSGroupThread class]]) { - UIAlertController *removingFromGroup = [UIAlertController - alertControllerWithTitle:[NSString - stringWithFormat:NSLocalizedString(@"GROUP_REMOVING", nil), [thread name]] - message:nil - preferredStyle:UIAlertControllerStyleAlert]; - [self presentViewController:removingFromGroup animated:YES completion:nil]; - - TSOutgoingMessage *message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] - inThread:thread - messageBody:@"" - attachmentIds:[NSMutableArray new]]; - message.groupMetaMessage = TSGroupMessageQuit; - [self.messageSender sendMessage:message - success:^{ - [self dismissViewControllerAnimated:YES - completion:^{ - [self deleteThread:thread]; - }]; - } - failure:^(NSError *error) { - [self dismissViewControllerAnimated:YES - completion:^{ - SignalAlertView(NSLocalizedString(@"GROUP_REMOVING_FAILED", nil), - error.localizedRecoverySuggestion); - }]; - }]; + + TSGroupThread *gThread = (TSGroupThread *)thread; + if ([gThread.groupModel.groupMemberIds containsObject:[TSAccountManager localNumber]]) { + UIAlertController *removingFromGroup = [UIAlertController + alertControllerWithTitle:[NSString + stringWithFormat:NSLocalizedString(@"GROUP_REMOVING", nil), [thread name]] + message:nil + preferredStyle:UIAlertControllerStyleAlert]; + [self presentViewController:removingFromGroup animated:YES completion:nil]; + + TSOutgoingMessage *message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] + inThread:thread + messageBody:@"" + attachmentIds:[NSMutableArray new]]; + message.groupMetaMessage = TSGroupMessageQuit; + [self.messageSender sendMessage:message + success:^{ + [self dismissViewControllerAnimated:YES + completion:^{ + [self deleteThread:thread]; + }]; + } + failure:^(NSError *error) { + [self dismissViewControllerAnimated:YES + completion:^{ + SignalAlertView(NSLocalizedString(@"GROUP_REMOVING_FAILED", nil), + error.localizedRecoverySuggestion); + }]; + }]; + } else { + [self deleteThread:thread]; + } } else { [self deleteThread:thread]; }