From df44e5afcaafc820fc4303b35c69e40db9a535c7 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Fri, 29 May 2020 14:51:08 +1000 Subject: [PATCH] Fix FR logic --- js/models/conversations.js | 13 +++++++------ js/models/messages.js | 25 ++++++++++++++++--------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index 9929755c7..1b234b981 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -1059,6 +1059,9 @@ }, // We have accepted an incoming friend request async onAcceptFriendRequest(options = {}) { + if (this.get('type') !== Message.PRIVATE) { + return; + } if (this.unlockTimer) { clearTimeout(this.unlockTimer); } @@ -1075,14 +1078,12 @@ window.textsecure.OutgoingMessage.DebugMessageType .INCOMING_FR_ACCEPTED ); - - // send an AFR to other device of that user (or none) - const primaryPubKey = await libloki.api.getPrimaryDevicePubkey(this.id); - + } else if (this.isFriendRequestStatusNoneOrExpired()) { + // send AFR if we haven't sent a message before const autoFrMessage = textsecure.OutgoingMessage.buildAutoFriendRequestMessage( - primaryPubKey + this.id ); - await autoFrMessage.sendToNumber(primaryPubKey, true, this.id); + await autoFrMessage.sendToNumber(this.id, false); } }, // Our outgoing friend request has been accepted diff --git a/js/models/messages.js b/js/models/messages.js index 85d3d6437..dc62e6846 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -415,21 +415,19 @@ }, async acceptFriendRequest() { - const primaryDevicePubKey = this.attributes.conversationId; - if (this.get('friendStatus') !== 'pending') { return; } - const allDevices = await libloki.storage.getAllDevicePubKeysForPrimaryPubKey( - primaryDevicePubKey - ); + const devicePubKey = this.get('conversationId'); + const otherDevices = await libloki.storage.getPairedDevicesFor(devicePubKey); + const allDevices = [devicePubKey, ...otherDevices]; // Set profile name to primary conversation let profileName; const allConversationsWithUser = allDevices.map(d => ConversationController.get(d) - ); + ).filter(c => Boolean(c)); allConversationsWithUser.forEach(conversation => { // If we somehow received an old friend request (e.g. after having restored // from seed, we won't be able to accept it, we should initiate our own @@ -447,6 +445,7 @@ // If you don't have a profile name for this device, and profileName is set, // add profileName to conversation. + const primaryDevicePubKey = (await libloki.storage.getPrimaryDeviceFor(devicePubKey)) || devicePubKey; const primaryConversation = allConversationsWithUser.find( c => c.id === primaryDevicePubKey ); @@ -471,13 +470,21 @@ if (this.get('friendStatus') !== 'pending') { return; } - const conversation = this.getConversation(); this.set({ friendStatus: 'declined' }); await window.Signal.Data.saveMessage(this.attributes, { Message: Whisper.Message, }); - conversation.onDeclineFriendRequest(); + + const devicePubKey = this.attributes.conversationId; + const otherDevices = await libloki.storage.getPairedDevicesFor(devicePubKey); + const allDevices = [devicePubKey, ...otherDevices]; + const allConversationsWithUser = allDevices.map(d => + ConversationController.get(d) + ).filter(c => Boolean(c)); + allConversationsWithUser.forEach(conversation => { + conversation.onDeclineFriendRequest(); + }); }, getPropsForFriendRequest() { const friendStatus = this.get('friendStatus') || 'pending'; @@ -2571,7 +2578,7 @@ } // We need to map the original message source to the primary device - if (source !== ourNumber && !message.isFriendRequest()) { + if (source !== ourNumber) { message.set({ source: primarySource }); }