From d4c55d69404c99927da716c443997415ad7bc6ba Mon Sep 17 00:00:00 2001 From: Matthew Douglass Date: Mon, 17 Oct 2016 07:15:50 -0700 Subject: [PATCH] Maps numbers to names in TSGroupModel * Maps numbers to names in TSGroupModel Use an injected ContactsManager to look up proper user names for phone numbers in [TSGroupModel getInfoStringAboutUpdateTo]. Fixes WhisperSystems/Signal-iOS#757 * Supports custom messages for TSOutgoingMessage This will enable Signal-iOS to push detailed information about TSGroupModel updates through SignalServiceKit and into the TSInfoMessage created by TSMessagesManager+sendMessages // FREEBIE --- src/Messages/Interactions/TSOutgoingMessage.h | 1 + src/Messages/TSGroupModel.h | 3 ++- src/Messages/TSGroupModel.m | 22 ++++++++++++------- src/Messages/TSMessagesManager+sendMessages.m | 6 +++-- src/Messages/TSMessagesManager.m | 2 +- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Messages/Interactions/TSOutgoingMessage.h b/src/Messages/Interactions/TSOutgoingMessage.h index 3f735abea..959452f99 100644 --- a/src/Messages/Interactions/TSOutgoingMessage.h +++ b/src/Messages/Interactions/TSOutgoingMessage.h @@ -46,6 +46,7 @@ typedef NS_ENUM(NSInteger, TSOutgoingMessageState) { @property (nonatomic) TSOutgoingMessageState messageState; @property BOOL hasSyncedTranscript; +@property NSString *customMessage; /** * Signal Identifier (e.g. e164 number) or nil if in a group thread. diff --git a/src/Messages/TSGroupModel.h b/src/Messages/TSGroupModel.h index fdbeb3d5a..3e086293b 100644 --- a/src/Messages/TSGroupModel.h +++ b/src/Messages/TSGroupModel.h @@ -2,6 +2,7 @@ // Copyright (c) 2014 Open Whisper Systems. All rights reserved. #import "TSYapDatabaseObject.h" +#import "ContactsManagerProtocol.h" @interface TSGroupModel : TSYapDatabaseObject @@ -19,7 +20,7 @@ - (BOOL)isEqual:(id)other; - (BOOL)isEqualToGroupModel:(TSGroupModel *)model; -- (NSString *)getInfoStringAboutUpdateTo:(TSGroupModel *)model; +- (NSString *)getInfoStringAboutUpdateTo:(TSGroupModel *)model contactsManager:(id)contactsManager; #endif diff --git a/src/Messages/TSGroupModel.m b/src/Messages/TSGroupModel.m index fc6cbf76c..c02edcc70 100644 --- a/src/Messages/TSGroupModel.m +++ b/src/Messages/TSGroupModel.m @@ -2,6 +2,7 @@ // Copyright (c) 2014 Open Whisper Systems. All rights reserved. #import "TSGroupModel.h" +#import "FunctionalUtil.h" @implementation TSGroupModel @@ -50,7 +51,7 @@ return YES; } -- (NSString *)getInfoStringAboutUpdateTo:(TSGroupModel *)newModel { +- (NSString *)getInfoStringAboutUpdateTo:(TSGroupModel *)newModel contactsManager:(id)contactsManager { NSString *updatedGroupInfoString = @""; if (self == newModel) { return NSLocalizedString(@"GROUP_UPDATED", @""); @@ -79,17 +80,22 @@ if ([membersWhoLeft count] > 0) { + NSArray *oldMembersNames = [[membersWhoLeft allObjects] map:^NSString*(NSString* item) { + return [contactsManager nameStringForPhoneIdentifier:item]; + }]; updatedGroupInfoString = [updatedGroupInfoString - stringByAppendingString:[NSString - stringWithFormat:NSLocalizedString(@"GROUP_MEMBER_LEFT", @""), - [[membersWhoLeft allObjects] componentsJoinedByString:@", "]]]; + stringByAppendingString:[NSString + stringWithFormat:NSLocalizedString(@"GROUP_MEMBER_LEFT", @""), + [oldMembersNames componentsJoinedByString:@", "]]]; } - + if ([membersWhoJoined count] > 0) { + NSArray *newMembersNames = [[membersWhoJoined allObjects] map:^NSString*(NSString* item) { + return [contactsManager nameStringForPhoneIdentifier:item]; + }]; updatedGroupInfoString = [updatedGroupInfoString - stringByAppendingString:[NSString stringWithFormat:NSLocalizedString(@"GROUP_MEMBER_JOINED", @""), - [[membersWhoJoined allObjects] - componentsJoinedByString:@", "]]]; + stringByAppendingString:[NSString stringWithFormat:NSLocalizedString(@"GROUP_MEMBER_JOINED", @""), + [newMembersNames componentsJoinedByString:@", "]]]; } return updatedGroupInfoString; diff --git a/src/Messages/TSMessagesManager+sendMessages.m b/src/Messages/TSMessagesManager+sendMessages.m index 9e902b690..b035a90ec 100644 --- a/src/Messages/TSMessagesManager+sendMessages.m +++ b/src/Messages/TSMessagesManager+sendMessages.m @@ -583,14 +583,16 @@ dispatch_queue_t sendingQueue() { [[[TSInfoMessage alloc] initWithTimestamp:message.timestamp inThread:thread - messageType:TSInfoMessageTypeGroupQuit] saveWithTransaction:transaction]; + messageType:TSInfoMessageTypeGroupQuit + customMessage:message.customMessage] saveWithTransaction:transaction]; }]; } else { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [[[TSInfoMessage alloc] initWithTimestamp:message.timestamp inThread:thread - messageType:TSInfoMessageTypeGroupUpdate] saveWithTransaction:transaction]; + messageType:TSInfoMessageTypeGroupUpdate + customMessage:message.customMessage] saveWithTransaction:transaction]; }]; } } diff --git a/src/Messages/TSMessagesManager.m b/src/Messages/TSMessagesManager.m index 94b8f1da6..1941d7300 100644 --- a/src/Messages/TSMessagesManager.m +++ b/src/Messages/TSMessagesManager.m @@ -412,7 +412,7 @@ NS_ASSUME_NONNULL_BEGIN } } - NSString *updateGroupInfo = [gThread.groupModel getInfoStringAboutUpdateTo:model]; + NSString *updateGroupInfo = [gThread.groupModel getInfoStringAboutUpdateTo:model contactsManager:self.contactsManager]; gThread.groupModel = model; [gThread saveWithTransaction:transaction]; [[[TSInfoMessage alloc] initWithTimestamp:timestamp