From 4e6e573f18aae9d168a92fad5e093d1c49c7b3bd Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 13 May 2020 04:23:26 +1000 Subject: [PATCH] Testing w clg --- js/background.js | 46 ++++++++++++++++++++-------- js/conversation_controller.js | 9 ++---- js/models/conversations.js | 3 -- js/views/create_group_dialog_view.js | 42 ++++++++++++++++++++----- libtextsecure/message_receiver.js | 2 -- 5 files changed, 70 insertions(+), 32 deletions(-) diff --git a/js/background.js b/js/background.js index e944bf378..3b2d86b82 100644 --- a/js/background.js +++ b/js/background.js @@ -641,7 +641,6 @@ const ev = new Event('message'); ev.confirm = () => {}; - const convo = await ConversationController.getOrCreateAndWait( groupId, 'group' @@ -650,43 +649,64 @@ if (convo.isClosedGroup()) { // when removing, remove all pubkeys associated with this // device to avoid sync delay issues and invalid group settings - + // await window.libloki.storage.getPairedDevicesFor() const allPubkeys = members; - + // for each pubkey, get its paired devices // we want to find all current members, // and subtract members to get members to remove // membersToRemove = currentMembers - newMembers - + // membersToAdd // first, get members to remove. // then for each user to remove, find its devices // if pubkey already in devices to remove, skip const currentMembers = convo.attributes.members; - - const membersToRemove = currentMembers.filter(member => !_.includes(members, member)); - // console.log('[vince] members:', members); - // console.log('[vince] currentMembers:', currentMembers); - // console.log('[vince] membersToRemove:', membersToRemove); + const membersToRemove = currentMembers.filter( + member => !_.includes(members, member) + ); + + const allMembersToRemove = []; + membersToRemove.forEach(async member => { + const pairedDevices = await libloki.storage.getPairedDevicesFor(member); + allMembersToRemove.push(member, ...pairedDevices); + + console.log('[vince] ALL DEVICES FOR THIS USER:', [member, ...pairedDevices]); + }); + + console.log('[vince] members:', members); + console.log('[vince] currentMembers:', currentMembers); + console.log('[vince] membersToRemove:', membersToRemove); + console.log('[vince] allMembersToRemove:', allMembersToRemove); + + /// OOOOOH interesting. The member is already removed by the + // time this function is called + + + + // For each of allMembersToRemove, + // if you exist in members, // allPubkeys.forEach(pubkey => { - + // }); // const pairedDevices = 5; // console.log('[vince] this.members:', this.get('members')); // console.log('[vince] providedGroupUpdate:', providedGroupUpdate); // console.log('[vince] groupUpdate:', groupUpdate); - - + console.log('[vince] doUpdateGroup: members:', members); - } + // rturn early for testing + alert('return early for testing'); + return; + } ev.data = { source: ourKey, diff --git a/js/conversation_controller.js b/js/conversation_controller.js index 4725be7ed..3ccee6521 100644 --- a/js/conversation_controller.js +++ b/js/conversation_controller.js @@ -169,7 +169,7 @@ const deviceIds = await textsecure.storage.protocol.getDeviceIds(id); console.log('[vince] deviceIds:', deviceIds); - + await Promise.all( deviceIds.map(deviceId => { const address = new libsignal.SignalProtocolAddress(id, deviceId); @@ -177,18 +177,13 @@ textsecure.storage.protocol, address ); - + console.log('[vince] address:', address); console.log('[vince] sessionCipher:', sessionCipher); return sessionCipher.deleteAllSessionsForDevice(); }) ); - - - - - } else if (conversation.isPublic()) { const channelAPI = await conversation.getPublicSendData(); if (channelAPI === null) { diff --git a/js/models/conversations.js b/js/models/conversations.js index a2ca4a46f..e74f3d5e6 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -2235,10 +2235,8 @@ }); message.set({ id }); - console.log('[vince] conversations.js --> groupUpdate:', groupUpdate); - const options = this.getSendOptions(); message.send( this.wrapSend( @@ -2276,7 +2274,6 @@ const groupNumbers = this.getRecipients(); this.set({ left: true }); - // await window.Signal.Data.updateConversation(this.id, this.attributes, { // Conversation: Whisper.Conversation, // }); diff --git a/js/views/create_group_dialog_view.js b/js/views/create_group_dialog_view.js index b2f04539f..83cb6c598 100644 --- a/js/views/create_group_dialog_view.js +++ b/js/views/create_group_dialog_view.js @@ -1,4 +1,4 @@ -/* global Whisper, i18n, textsecure, _ */ +/* global Whisper, i18n, textsecure, libloki, _ */ // eslint-disable-next-line func-names (function() { @@ -153,6 +153,8 @@ if (!Array.isArray(this.existingMembers)) { this.existingMembers = []; } + + console.log('[vince] UpdateGroupMembersDialogView this AFTER', this); } this.$el.focus(); @@ -183,13 +185,30 @@ const ourPK = textsecure.storage.user.getNumber(); const allMembers = window.Lodash.concat(newMembers, [ourPK]); + + // We need to NOT trigger an group update if the list of member is the same. const notPresentInOld = allMembers.filter( m => !this.existingMembers.includes(m) ); + + // Filter out all linked devices for cases in which one device + // exists in group, but hasn't yet synced with its other devices. const notPresentInNew = this.existingMembers.filter( m => !allMembers.includes(m) ); + + // Get all devices for notPresentInNew + const allDevicesOfMembersToRemove = []; + notPresentInNew.forEach(async member => { + const pairedDevices = await libloki.storage.getPairedDevicesFor(member); + allDevicesOfMembersToRemove.push(member, ...pairedDevices); + }); + + const allToRemove = allDevicesOfMembersToRemove.filter( + m => this.existingMembers.includes(m) + ); + // would be easer with _.xor but for some reason we do not have it const xor = notPresentInNew.concat(notPresentInOld); if (xor.length === 0) { @@ -200,12 +219,21 @@ return; } - window.doUpdateGroup( - this.groupId, - this.groupName, - allMembers, - this.avatarPath - ); + console.log('[vince] allDevicesOfMembersToRemove:', allDevicesOfMembersToRemove); + console.log('[vince] allMembers:', allMembers); + console.log('[vince] notPresentInOld:', notPresentInOld); + console.log('[vince] notPresentInNew:', notPresentInNew); + console.log('[vince] xor:', xor); + console.log('[vince] allToRemove:', allToRemove); + + alert('returning earlyyyy'); + + // window.doUpdateGroup( + // this.groupId, + // this.groupName, + // allMembers, + // this.avatarPath + // ); }, close() { this.remove(); diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index bdac7158c..d4ae29a6d 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -1427,12 +1427,10 @@ MessageReceiver.prototype.extend({ ); } - console.log('[vince] THIS IS A syncMessage:'); console.log('[vince] envelope:', envelope); console.log('[vince] syncMessage:', syncMessage); - if (syncMessage.sent) { const sentMessage = syncMessage.sent; const to = sentMessage.message.group