diff --git a/js/libtextsecure.js b/js/libtextsecure.js index 07ffa205d..c9451fe1b 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -36955,28 +36955,33 @@ MessageReceiver.prototype = { return this.handleAttachment(attachmentPointer).then(function() { var groupBuffer = new GroupBuffer(attachmentPointer.data); var groupDetails = groupBuffer.next(); + var promises = []; while (groupDetails !== undefined) { - (function(groupDetails) { + var promise = (function(groupDetails) { groupDetails.id = getString(groupDetails.id); - textsecure.storage.groups.getGroup(groupDetails.id). - then(function(existingGroup) { - if (existingGroup === undefined) { - return textsecure.storage.groups.createNewGroup( - groupDetails.members, groupDetails.id - ); - } else { - return textsecure.storage.groups.updateNumbers( - groupDetails.id, groupDetails.members - ); - } - }).then(function() { - var ev = new Event('group'); - ev.groupDetails = groupDetails; - eventTarget.dispatchEvent(ev); - }); + return textsecure.storage.groups.getGroup(groupDetails.id). + then(function(existingGroup) { + if (existingGroup === undefined) { + return textsecure.storage.groups.createNewGroup( + groupDetails.members, groupDetails.id + ); + } else { + return textsecure.storage.groups.updateNumbers( + groupDetails.id, groupDetails.members + ); + } + }).then(function() { + var ev = new Event('group'); + ev.groupDetails = groupDetails; + eventTarget.dispatchEvent(ev); + }); })(groupDetails); groupDetails = groupBuffer.next(); + promises.push(promise); } + Promise.all(promises).then(function() { + eventTarget.dispatchEvent(new Event('groupsync')); + }); }); }, handleAttachment: function(attachment) { diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 315bbe087..f17a79001 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -223,28 +223,33 @@ MessageReceiver.prototype = { return this.handleAttachment(attachmentPointer).then(function() { var groupBuffer = new GroupBuffer(attachmentPointer.data); var groupDetails = groupBuffer.next(); + var promises = []; while (groupDetails !== undefined) { - (function(groupDetails) { + var promise = (function(groupDetails) { groupDetails.id = getString(groupDetails.id); - textsecure.storage.groups.getGroup(groupDetails.id). - then(function(existingGroup) { - if (existingGroup === undefined) { - return textsecure.storage.groups.createNewGroup( - groupDetails.members, groupDetails.id - ); - } else { - return textsecure.storage.groups.updateNumbers( - groupDetails.id, groupDetails.members - ); - } - }).then(function() { - var ev = new Event('group'); - ev.groupDetails = groupDetails; - eventTarget.dispatchEvent(ev); - }); + return textsecure.storage.groups.getGroup(groupDetails.id). + then(function(existingGroup) { + if (existingGroup === undefined) { + return textsecure.storage.groups.createNewGroup( + groupDetails.members, groupDetails.id + ); + } else { + return textsecure.storage.groups.updateNumbers( + groupDetails.id, groupDetails.members + ); + } + }).then(function() { + var ev = new Event('group'); + ev.groupDetails = groupDetails; + eventTarget.dispatchEvent(ev); + }); })(groupDetails); groupDetails = groupBuffer.next(); + promises.push(promise); } + Promise.all(promises).then(function() { + eventTarget.dispatchEvent(new Event('groupsync')); + }); }); }, handleAttachment: function(attachment) {