From a768b944718caaad55d46884b2b54ca2102b55de Mon Sep 17 00:00:00 2001 From: haffenloher Date: Mon, 6 Feb 2017 15:13:04 +0100 Subject: [PATCH] Remove unregistered group members Locally remove unregistered users from group membership lists. Fixes #989 Related to Whispersystems/Signal-Android#6175 Closes #1052 // FREEBIE --- js/models/conversations.js | 13 +++++++++++++ js/models/messages.js | 19 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index 519dcbf7bd9..e8cc0247807 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -62,6 +62,19 @@ message.save().then(this.trigger.bind(this,'newmessage', message)); }, + addMemberLeft: function(source) { + var timestamp = Date.now(); + var message = new Whisper.Message({ + conversationId : this.id, + source : source, + type : 'incoming', + sent_at : timestamp, + received_at : timestamp, + group_update : {left: source} + }); + message.save().then(this.trigger.bind(this,'newmessage', message)); + }, + onReadMessage: function(message) { if (this.messageCollection.get(message.id)) { this.messageCollection.get(message.id).fetch(); diff --git a/js/models/messages.js b/js/models/messages.js index 50be25a0db4..512da9e96d0 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -201,21 +201,36 @@ this.sendSyncMessage(); }.bind(this)).catch(function(result) { var now = Date.now(); + var errors; + var conversation = this.getConversation(); this.trigger('done'); if (result.dataMessage) { this.set({dataMessage: result.dataMessage}); } if (result instanceof Error) { - this.saveErrors(result); + errors = [result]; + this.saveErrors(errors); } else { - this.saveErrors(result.errors); + errors = result.errors; + this.saveErrors(errors); if (result.successfulNumbers.length > 0) { this.set({sent: true, expirationStartTimestamp: now}); this.sendSyncMessage(); } } + if (conversation.get('type') === 'group') { + errors.forEach(function(e) { + if (e.name === 'UnregisteredUserError') { + textsecure.storage.groups.removeNumber(conversation.id, e.number); + conversation.addMemberLeft(e.number); + conversation.set({ + members: _.without(conversation.get('members'), e.number) + }); + } + }); + } }.bind(this)); },