From d5118273b871f9886c8f971d6965c79d6bb03f2b Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 10 May 2017 10:05:01 -0400 Subject: [PATCH] Respond to CR. // FREEBIE --- .../OWSSyncGroupsRequestMessage.m | 13 --- src/Messages/TSMessagesManager.m | 99 +++++++++++-------- 2 files changed, 60 insertions(+), 52 deletions(-) diff --git a/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m b/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m index e4b86b27e..ba6462b77 100644 --- a/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m +++ b/src/Messages/DeviceSyncing/OWSSyncGroupsRequestMessage.m @@ -43,11 +43,6 @@ NS_ASSUME_NONNULL_BEGIN return NO; } -- (BOOL)isLegacyMessage -{ - return NO; -} - - (OWSSignalServiceProtosDataMessageBuilder *)dataMessageBuilder { OWSSignalServiceProtosGroupContextBuilder *groupContextBuilder = [OWSSignalServiceProtosGroupContextBuilder new]; @@ -60,14 +55,6 @@ NS_ASSUME_NONNULL_BEGIN return builder; } -- (NSData *)buildPlainTextData -{ - OWSSignalServiceProtosContentBuilder *contentBuilder = [OWSSignalServiceProtosContentBuilder new]; - [contentBuilder setDataMessageBuilder:[self dataMessageBuilder]]; - - return [[contentBuilder build] data]; -} - @end NS_ASSUME_NONNULL_END diff --git a/src/Messages/TSMessagesManager.m b/src/Messages/TSMessagesManager.m index 40ccf7f71..bbc1f592a 100644 --- a/src/Messages/TSMessagesManager.m +++ b/src/Messages/TSMessagesManager.m @@ -498,7 +498,7 @@ NS_ASSUME_NONNULL_BEGIN __block TSThread *thread; [[TSStorageManager sharedManager].dbConnection - readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { thread = [TSContactThread getOrCreateThreadWithContactId:recipientId transaction:transaction]; }]; @@ -570,10 +570,10 @@ NS_ASSUME_NONNULL_BEGIN return; } [attachmentsProcessor fetchAttachmentsForMessage:nil - success:^(TSAttachmentStream *_Nonnull attachmentStream) { + success:^(TSAttachmentStream *attachmentStream) { [groupThread updateAvatarWithAttachmentStream:attachmentStream]; } - failure:^(NSError *_Nonnull error) { + failure:^(NSError *error) { DDLogError(@"%@ failed to fetch attachments for group avatar sent at: %llu. with error: %@", self.tag, envelope.timestamp, @@ -597,16 +597,21 @@ NS_ASSUME_NONNULL_BEGIN return; } - TSIncomingMessage *createdMessage = [self handleReceivedEnvelope:envelope - withDataMessage:dataMessage - attachmentIds:attachmentsProcessor.supportedAttachmentIds]; + TSIncomingMessage *_Nullable createdMessage = + [self handleReceivedEnvelope:envelope + withDataMessage:dataMessage + attachmentIds:attachmentsProcessor.supportedAttachmentIds]; + + if (!createdMessage) { + return; + } [attachmentsProcessor fetchAttachmentsForMessage:createdMessage - success:^(TSAttachmentStream *_Nonnull attachmentStream) { + success:^(TSAttachmentStream *attachmentStream) { DDLogDebug( @"%@ successfully fetched attachment: %@ for message: %@", self.tag, attachmentStream, createdMessage); } - failure:^(NSError *_Nonnull error) { + failure:^(NSError *error) { DDLogError( @"%@ failed to fetch attachments for message: %@ with error: %@", self.tag, createdMessage, error); }]; @@ -626,13 +631,13 @@ NS_ASSUME_NONNULL_BEGIN networkManager:self.networkManager]; if ([self isDataMessageGroupAvatarUpdate:syncMessage.sent.message]) { - [recordJob runWithAttachmentHandler:^(TSAttachmentStream *_Nonnull attachmentStream) { + [recordJob runWithAttachmentHandler:^(TSAttachmentStream *attachmentStream) { TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupIdData:syncMessage.sent.message.group.id]; [groupThread updateAvatarWithAttachmentStream:attachmentStream]; }]; } else { - [recordJob runWithAttachmentHandler:^(TSAttachmentStream *_Nonnull attachmentStream) { + [recordJob runWithAttachmentHandler:^(TSAttachmentStream *attachmentStream) { DDLogDebug(@"%@ successfully fetched transcript attachment: %@", self.tag, attachmentStream); }]; } @@ -756,7 +761,7 @@ NS_ASSUME_NONNULL_BEGIN success:^{ DDLogDebug(@"%@ Successfully sent group update with avatar", self.tag); } - failure:^(NSError *_Nonnull error) { + failure:^(NSError *error) { DDLogError(@"%@ Failed to send group avatar update with error: %@", self.tag, error); }]; } else { @@ -764,15 +769,50 @@ NS_ASSUME_NONNULL_BEGIN success:^{ DDLogDebug(@"%@ Successfully sent group update", self.tag); } - failure:^(NSError *_Nonnull error) { + failure:^(NSError *error) { DDLogError(@"%@ Failed to send group update with error: %@", self.tag, error); }]; } } -- (TSIncomingMessage *)handleReceivedEnvelope:(OWSSignalServiceProtosEnvelope *)envelope - withDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage - attachmentIds:(NSArray *)attachmentIds +- (void)handleGroupInfoRequest:(OWSSignalServiceProtosDataMessage *)dataMessage +{ + OWSAssert([NSThread isMainThread]); + OWSAssert(dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeRequestInfo); + + NSData *groupId = dataMessage.hasGroup ? dataMessage.group.id : nil; + if (!groupId) { + OWSAssert(groupId); + return; + } + + DDLogInfo(@"%@ Received 'Request Group Info' message for group: %@", self.tag, groupId); + + [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + TSGroupModel *emptyModelToFillOutId = + [[TSGroupModel alloc] initWithTitle:nil memberIds:nil image:nil groupId:dataMessage.group.id]; + TSGroupThread *gThread = [TSGroupThread threadWithGroupModel:emptyModelToFillOutId transaction:transaction]; + if (!gThread) { + DDLogInfo(@"%@ Unknown group: %@", self.tag, groupId); + return; + } + + NSString *updateGroupInfo = + [gThread.groupModel getInfoStringAboutUpdateTo:gThread.groupModel contactsManager:self.contactsManager]; + TSOutgoingMessage *message = [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] + inThread:gThread + groupMetaMessage:TSGroupMessageUpdate]; + [message updateWithCustomMessage:updateGroupInfo transaction:transaction]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self sendGroupUpdateForThread:gThread message:message]; + }); + }]; +} + +- (TSIncomingMessage *_Nullable)handleReceivedEnvelope:(OWSSignalServiceProtosEnvelope *)envelope + withDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage + attachmentIds:(NSArray *)attachmentIds { OWSAssert([NSThread isMainThread]); uint64_t timestamp = envelope.timestamp; @@ -786,32 +826,13 @@ NS_ASSUME_NONNULL_BEGIN OWSAssert([TSAccountManager isRegistered]); NSString *localNumber = [TSAccountManager localNumber]; + if (dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeRequestInfo) { + [self handleGroupInfoRequest:dataMessage]; + return nil; + } + [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { if (groupId) { - if (dataMessage.group.type == OWSSignalServiceProtosGroupContextTypeRequestInfo) { - DDLogInfo(@"Received 'Request Group Info' message for group: %@", groupId); - - TSGroupModel *emptyModelToFillOutId = - [[TSGroupModel alloc] initWithTitle:nil memberIds:nil image:nil groupId:dataMessage.group.id]; - TSGroupThread *gThread = - [TSGroupThread threadWithGroupModel:emptyModelToFillOutId transaction:transaction]; - if (gThread) { - NSString *updateGroupInfo = [gThread.groupModel getInfoStringAboutUpdateTo:gThread.groupModel - contactsManager:self.contactsManager]; - TSOutgoingMessage *message = - [[TSOutgoingMessage alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp] - inThread:gThread - groupMetaMessage:TSGroupMessageUpdate]; - [message updateWithCustomMessage:updateGroupInfo transaction:transaction]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self sendGroupUpdateForThread:gThread message:message]; - }); - } - - return; - } - NSMutableArray *uniqueMemberIds = [[[NSSet setWithArray:dataMessage.group.members] allObjects] mutableCopy]; TSGroupModel *model = [[TSGroupModel alloc] initWithTitle:dataMessage.group.name memberIds:uniqueMemberIds