Fix FR logic

pull/1137/head
Mikunj 5 years ago
parent 2cd07285d9
commit df44e5afca

@ -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

@ -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 });
}

Loading…
Cancel
Save