From d5d88c55895b6a44f02a6a10a43cbaa85c52f348 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Fri, 14 Feb 2020 09:30:34 +1100 Subject: [PATCH] fix the bug when sending the friend request for a contact sync message --- .../src/Messages/OWSMessageManager.m | 12 +++++++----- SignalServiceKit/src/Messages/OWSMessageSender.h | 3 +++ SignalServiceKit/src/Messages/OWSMessageSender.m | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 109561c1c..1f136d051 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1085,10 +1085,12 @@ NS_ASSUME_NONNULL_BEGIN switch (friendRequestStatus) { case LKThreadFriendRequestStatusNone: { OWSMessageSender *messageSender = SSKEnvironment.shared.messageSender; - OWSMessageSend *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey]; - dispatch_async(OWSDispatch.sendingQueue, ^{ - [messageSender sendMessage:automatedFriendRequestMessage]; - }); +// OWSMessageSend *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey]; +// dispatch_async(OWSDispatch.sendingQueue, ^{ +// [messageSender sendMessage:automatedFriendRequestMessage]; +// }); + LKFriendRequestMessage *automatedFriendRequestMessage = [messageSender getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:hexEncodedPublicKey inThread:thread transaction:transaction]; + [self.messageSenderJobQueue addMessage:automatedFriendRequestMessage transaction:transaction]; break; } case LKThreadFriendRequestStatusRequestReceived: { @@ -1106,11 +1108,11 @@ NS_ASSUME_NONNULL_BEGIN if (wasSentByMasterDevice && syncMessage.groups.data.length > 0) { OWSLogInfo(@"[Loki] Received group sync message."); NSData *data = syncMessage.groups.data; - // TODO: decode the data and handle the group info GroupParser *parser = [[GroupParser alloc] initWithData:data]; NSArray *groupModels = [parser parseGroupModels]; for (TSGroupModel *groupModel in groupModels) { TSGroupThread *thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction]; + //TODO: Join the group and send update group information [self establishSessionsWithMembersIfNeeded:groupModel.groupMemberIds forThread:thread transaction:transaction]; } } diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.h b/SignalServiceKit/src/Messages/OWSMessageSender.h index f223aadcf..b6af35dc2 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.h +++ b/SignalServiceKit/src/Messages/OWSMessageSender.h @@ -3,6 +3,8 @@ // #import "DataSource.h" +#import "TSContactThread.h" +#import "LKFriendRequestMessage.h" NS_ASSUME_NONNULL_BEGIN @@ -98,6 +100,7 @@ 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; - (void)sendMessage:(OWSMessageSend *)messageSend; diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 9d96edbfc..5b2c88a41 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -945,6 +945,22 @@ 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 +{ + 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]; + 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; + return message; +} + - (OWSMessageSend *)getMultiDeviceFriendRequestMessageForHexEncodedPublicKey:(NSString *)hexEncodedPublicKey { __block TSContactThread *thread;