From ae25d62ef262bd230af0ec3c89cebcdada6c57a0 Mon Sep 17 00:00:00 2001 From: lilia Date: Fri, 2 Oct 2015 12:14:34 -0700 Subject: [PATCH] Fix up post-conflict resolution error processing // FREEBIE --- js/models/messages.js | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/js/models/messages.js b/js/models/messages.js index 3da878b34..b8f9eeb42 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -155,14 +155,22 @@ console.log(e); console.log(e.reason, e.stack); }); - return this.save({ - errors : errors.map(function(e) { - if (e.constructor === Error) { - return _.pick(e, 'name', 'message', 'code', 'number', 'reason'); - } - return e; - }) + errors = errors.map(function(e) { + if (e.constructor === Error) { + return _.pick(e, 'name', 'message', 'code', 'number', 'reason'); + } + return e; }); + return this.save({errors : this.get('errors').concat(errors)}); + }, + + removeConflictFor: function(number) { + var errors = _.reject(this.get('errors'), function(e) { + return e.number === number && + (e.name === 'IncomingIdentityKeyError' || + e.name === 'OutgoingIdentityKeyError'); + }); + this.set({errors: errors}); }, resend: function(number) { @@ -176,17 +184,21 @@ resolveConflict: function(number) { var error = this.getKeyConflict(number); if (error) { + this.removeConflictFor(number); var promise = new textsecure.ReplayableError(error).replay(); if (this.isIncoming()) { promise = promise.then(function(dataMessage) { this.handleDataMessage(dataMessage); }.bind(this)); + } else { + promise = promise.then(function() { + this.save(); + }.bind(this)); } - promise.then(function() { - this.save('errors', []); - }.bind(this)).catch(function(e) { + promise.catch(function(e) { this.saveErrors(e); }.bind(this)); + return promise; } },