From 3479fc433335ef7995df5143f612f5745d5dbead Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 28 Feb 2020 09:58:45 +0700 Subject: [PATCH] Reduce code duplication --- .../View Controllers/DeviceLinkingModal.swift | 4 ++-- .../View Controllers/NewClosedGroupVC.swift | 3 +-- SignalMessaging/contacts/OWSSyncManager.m | 9 ++++----- .../src/Contacts/Threads/TSGroupThread.h | 2 +- .../src/Contacts/Threads/TSGroupThread.m | 8 ++++---- .../src/Devices/OWSGroupsOutputStream.m | 8 +++++--- .../src/Loki/Messaging/GroupParser.swift | 8 ++------ .../DeviceSyncing/OWSSyncGroupsMessage.m | 2 +- .../src/Messages/OWSMessageManager.m | 9 +++++---- .../src/Messages/OWSMessageSender.h | 2 +- .../src/Messages/OWSMessageSender.m | 17 ++++------------- 11 files changed, 30 insertions(+), 42 deletions(-) diff --git a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift index 195dd5669..2ac78e166 100644 --- a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift +++ b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift @@ -165,8 +165,8 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { let linkingAuthorizationMessage = DeviceLinkingUtilities.getLinkingAuthorizationMessage(for: deviceLink) ThreadUtil.enqueue(linkingAuthorizationMessage) SSKEnvironment.shared.messageSender.send(linkingAuthorizationMessage, success: { - let _ = [SSKEnvironment.shared.syncManager.syncAllContacts(), - SSKEnvironment.shared.syncManager.syncAllGroups()] + SSKEnvironment.shared.syncManager.syncAllContacts() + SSKEnvironment.shared.syncManager.syncAllGroups() }) { _ in print("[Loki] Failed to send device link authorization message.") } diff --git a/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift b/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift index 23d1aee5f..4a7008b48 100644 --- a/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift +++ b/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift @@ -173,9 +173,8 @@ final class NewClosedGroupVC : UIViewController, UITableViewDataSource, UITableV storage.dbReadConnection.readWrite { transaction in masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: userHexEncodedPublicKey, in: transaction) ?? userHexEncodedPublicKey } - let members = [String](selectedContacts) + [ masterHexEncodedPublicKey ] + let members = selectedContacts + [ masterHexEncodedPublicKey ] let admins = [ masterHexEncodedPublicKey ] - let groupID = LKGroupUtilities.getEncodedClosedGroupIDAsData(Randomness.generateRandomBytes(kGroupIdLength)!.toHexString()) let group = TSGroupModel(title: name, memberIds: members, image: nil, groupId: groupID, groupType: .closedGroup, adminIds: admins) let thread = TSGroupThread.getOrCreateThread(with: group) diff --git a/SignalMessaging/contacts/OWSSyncManager.m b/SignalMessaging/contacts/OWSSyncManager.m index d5c2c4574..52873e7f4 100644 --- a/SignalMessaging/contacts/OWSSyncManager.m +++ b/SignalMessaging/contacts/OWSSyncManager.m @@ -330,9 +330,8 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag NSMutableArray *promises = @[].mutableCopy; [TSGroupThread enumerateCollectionObjectsUsingBlock:^(id obj, BOOL *stop) { if (![obj isKindOfClass:[TSGroupThread class]]) { - if (![obj isKindOfClass:[TSContactThread class]]) { - OWSLogWarn(@"Ignoring non group thread in thread collection: %@", obj); - + if (![obj isKindOfClass:[TSContactThread class]]) { // FIXME: Isn't this redundant? + OWSLogWarn(@"Ignoring non-group thread in thread collection: %@.", obj); } return; } @@ -355,11 +354,11 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag AnyPromise *promise = [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve) { [self.messageSender sendMessage:syncGroupsMessage success:^{ - OWSLogInfo(@"Successfully sent groups sync message."); + OWSLogInfo(@"Successfully sent group sync message."); resolve(@(1)); } failure:^(NSError *error) { - OWSLogError(@"Failed to send groups sync message with error: %@.", error); + OWSLogError(@"Failed to send group sync message due to error: %@.", error); resolve(error); }]; }]; diff --git a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h index a243daa7f..3acc8a99b 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h @@ -39,7 +39,7 @@ extern NSString *const TSGroupThread_NotificationKey_UniqueId; - (BOOL)isLocalUserInGroup; - (BOOL)isLocalUserInGroupWithTransaction:(YapDatabaseReadTransaction *)transaction; - (BOOL)isUserInGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction; -- (BOOL)isUserAdminForGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction; +- (BOOL)isUserAdminInGroup:(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 98b80ecc3..3995c0c35 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m @@ -211,7 +211,7 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific return [linkedDeviceHexEncodedPublicKeys intersectsSet:[NSSet setWithArray:self.groupModel.groupMemberIds]]; } -- (BOOL)isUserAdminForGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction +- (BOOL)isUserAdminInGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction { if (hexEncodedPublicKey == nil) { return NO; } NSSet *linkedDeviceHexEncodedPublicKeys = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:hexEncodedPublicKey in:transaction]; @@ -241,13 +241,13 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific - (void)leaveGroupWithTransaction:(YapDatabaseReadWriteTransaction *)transaction { - NSMutableSet *newGroupMemberIds = [NSMutableSet setWithArray:self.groupModel.groupMemberIds]; + NSMutableSet *newGroupMemberIDs = [NSMutableSet setWithArray:self.groupModel.groupMemberIds]; NSString *userHexEncodedPublicKey = TSAccountManager.localNumber; if (userHexEncodedPublicKey != nil) { NSSet *linkedDeviceHexEncodedPublicKeys = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:userHexEncodedPublicKey in:transaction]; - [newGroupMemberIds minusSet:linkedDeviceHexEncodedPublicKeys]; + [newGroupMemberIDs minusSet:linkedDeviceHexEncodedPublicKeys]; } - self.groupModel.groupMemberIds = newGroupMemberIds.allObjects; + self.groupModel.groupMemberIds = newGroupMemberIDs.allObjects; [self saveWithTransaction:transaction]; } diff --git a/SignalServiceKit/src/Devices/OWSGroupsOutputStream.m b/SignalServiceKit/src/Devices/OWSGroupsOutputStream.m index fe14f15c3..89ce9e763 100644 --- a/SignalServiceKit/src/Devices/OWSGroupsOutputStream.m +++ b/SignalServiceKit/src/Devices/OWSGroupsOutputStream.m @@ -73,9 +73,11 @@ NS_ASSUME_NONNULL_BEGIN [self writeUInt32:groupDataLength]; [self writeData:groupData]; -// if (avatarPng) { -// [self writeData:avatarPng]; -// } + /* + if (avatarPng) { + [self writeData:avatarPng]; + } + */ } @end diff --git a/SignalServiceKit/src/Loki/Messaging/GroupParser.swift b/SignalServiceKit/src/Loki/Messaging/GroupParser.swift index 3c3fd68b1..2a42e3d58 100644 --- a/SignalServiceKit/src/Loki/Messaging/GroupParser.swift +++ b/SignalServiceKit/src/Loki/Messaging/GroupParser.swift @@ -21,12 +21,8 @@ let protoAsData = data[index..<(index+sizeAsInt)] guard let proto = try? SSKProtoGroupDetails.parseData(protoAsData) else { break } index += sizeAsInt - var groupModel = TSGroupModel.init(title: proto.name, - memberIds: proto.members, - image: nil, - groupId: proto.id, - groupType: GroupType.closedGroup, - adminIds: proto.admins) + var groupModel = TSGroupModel(title: proto.name, memberIds: proto.members, image: nil, + groupId: proto.id, groupType: GroupType.closedGroup, adminIds: proto.admins) result.append(groupModel) } return result diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m index 9ee62dd34..de6f8022a 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncGroupsMessage.m @@ -70,7 +70,7 @@ NS_ASSUME_NONNULL_BEGIN SSKProtoSyncMessageGroups *_Nullable groupsProto = [groupsBuilder buildAndReturnError:&error]; if (error || !groupsProto) { - OWSFailDebug(@"could not build protobuf: %@", error); + OWSFailDebug(@"Couldn't build protobuf due to error: %@.", error); return nil; } diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index ac3d4806d..10ae76c08 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1077,7 +1077,7 @@ NS_ASSUME_NONNULL_BEGIN [self.identityManager throws_processIncomingSyncMessage:syncMessage.verified transaction:transaction]; } else if (syncMessage.contacts != nil) { if (wasSentByMasterDevice && syncMessage.contacts.data.length > 0) { - OWSLogInfo(@"[Loki] Received contact sync message."); + [LKLogger print:@"[Loki] Received contact sync message."]; NSData *data = syncMessage.contacts.data; ContactParser *parser = [[ContactParser alloc] initWithData:data]; NSArray *hexEncodedPublicKeys = [parser parseHexEncodedPublicKeys]; @@ -1088,7 +1088,8 @@ NS_ASSUME_NONNULL_BEGIN switch (friendRequestStatus) { case LKThreadFriendRequestStatusNone: { OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender; - LKFriendRequestMessage *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey inThread:thread transaction:transaction]; + LKFriendRequestMessage *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey transaction:transaction]; + [automatedFriendRequestMessage saveWithTransaction:transaction]; [self.messageSenderJobQueue addMessage:automatedFriendRequestMessage transaction:transaction]; break; } @@ -1105,7 +1106,7 @@ NS_ASSUME_NONNULL_BEGIN } } else if (syncMessage.groups != nil) { if (wasSentByMasterDevice && syncMessage.groups.data.length > 0) { - OWSLogInfo(@"[Loki] Received group sync message."); + [LKLogger print:@"[Loki] Received group sync message."]; NSData *data = syncMessage.groups.data; GroupParser *parser = [[GroupParser alloc] initWithData:data]; NSArray *groupModels = [parser parseGroupModels]; @@ -1454,7 +1455,7 @@ NS_ASSUME_NONNULL_BEGIN switch (dataMessage.group.type) { case SSKProtoGroupContextTypeUpdate: { - if (oldGroupThread && ![oldGroupThread isUserAdminForGroup:hexEncodedPublicKey transaction:transaction]) { + if (oldGroupThread && ![oldGroupThread isUserAdminInGroup:hexEncodedPublicKey transaction:transaction]) { [LKLogger print:[NSString stringWithFormat:@"[Loki] Received a group update from a non-admin user for %@; ignoring.", [LKGroupUtilities getEncodedGroupID:groupId]]]; return nil; } diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.h b/SignalServiceKit/src/Messages/OWSMessageSender.h index b6af35dc2..acdab71fe 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.h +++ b/SignalServiceKit/src/Messages/OWSMessageSender.h @@ -100,8 +100,8 @@ NS_SWIFT_NAME(MessageSender) failure:(void (^)(NSError *error))failureHandler; - (OWSMessageSend *)getSessionRestoreMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey; -- (LKFriendRequestMessage *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey inThread:(TSContactThread *)thread transaction:(YapDatabaseReadWriteTransaction *)transaction; - (OWSMessageSend *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey; +- (LKFriendRequestMessage *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction; - (void)sendMessage:(OWSMessageSend *)messageSend; @end diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 168e67097..e54d7f908 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -937,9 +937,9 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; return [[OWSMessageSend alloc] initWithMessage:message thread:thread recipient:recipient senderCertificate:senderCertificate udAccess:theirUDAccess localNumber:userHexEncodedPublicKey success:^{ } failure:^(NSError *error) { }]; } -- (LKFriendRequestMessage *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey inThread:(TSContactThread *)thread transaction:(YapDatabaseReadWriteTransaction *)transaction +- (LKFriendRequestMessage *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction { - thread = [TSContactThread getOrCreateThreadWithContactId:hexEncodedPublicKey transaction:transaction]; + TSContactThread *thread = [TSContactThread getOrCreateThreadWithContactId:hexEncodedPublicKey transaction:transaction]; // Force hide slave device thread NSString *masterHexEncodedPublicKey = [LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:hexEncodedPublicKey in:transaction]; thread.isForceHidden = masterHexEncodedPublicKey != nil && ![masterHexEncodedPublicKey isEqualToString:hexEncodedPublicKey]; @@ -950,26 +950,17 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; LKFriendRequestMessage *message = [[LKFriendRequestMessage alloc] initOutgoingMessageWithTimestamp:NSDate.ows_millisecondTimeStamp inThread:thread messageBody:@"Please accept to enable messages to be synced across devices" attachmentIds:[NSMutableArray new] expiresInSeconds:0 expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil]; message.skipSave = YES; - [message saveWithTransaction:transaction]; return message; } - (OWSMessageSend *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey { __block TSContactThread *thread; + __block LKFriendRequestMessage *message; [OWSPrimaryStorage.sharedManager.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { thread = [TSContactThread getOrCreateThreadWithContactId:hexEncodedPublicKey transaction:transaction]; - // Force hide slave device thread - NSString *masterHexEncodedPublicKey = [LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:hexEncodedPublicKey in:transaction]; - thread.isForceHidden = masterHexEncodedPublicKey != nil && ![masterHexEncodedPublicKey isEqualToString:hexEncodedPublicKey]; - if (thread.friendRequestStatus == LKThreadFriendRequestStatusNone || thread.friendRequestStatus == LKThreadFriendRequestStatusRequestExpired) { - [thread saveFriendRequestStatus:LKThreadFriendRequestStatusRequestSent withTransaction:transaction]; - } - [thread saveWithTransaction:transaction]; + message = [self getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey transaction:transaction]; }]; - LKFriendRequestMessage *message = [[LKFriendRequestMessage alloc] initOutgoingMessageWithTimestamp:NSDate.ows_millisecondTimeStamp inThread:thread messageBody:@"Please accept to enable messages to be synced across devices" attachmentIds:[NSMutableArray new] - expiresInSeconds:0 expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil]; - message.skipSave = YES; SignalRecipient *recipient = [[SignalRecipient alloc] initWithUniqueId:hexEncodedPublicKey]; NSString *userHexEncodedPublicKey = OWSIdentityManager.sharedManager.identityKeyPair.hexEncodedPublicKey; SMKSenderCertificate *senderCertificate = [self.udManager getSenderCertificate];