From 4136e3633c810100ef34db32227bbb57535e6ef4 Mon Sep 17 00:00:00 2001 From: lilia Date: Fri, 6 Nov 2015 17:37:12 -0800 Subject: [PATCH] Fix incoming key conflict behaviors Follow up to ddd2e67eb5de1e105fb938115123643ad049f687 but for incoming messages. * Conflict state sometimes failed to be removed even though the conflict was resolved. * Messages failed to re-render after a conflict. We want to re-render only the error state on outgoing messages, to avoid flickering attachments. On incoming messages, we need to call render to populate the message text, avatar, etc... // FREEBIE --- js/models/messages.js | 1 + js/views/message_view.js | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/js/models/messages.js b/js/models/messages.js index 8ac319122..d88635e77 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -202,6 +202,7 @@ var promise = new textsecure.ReplayableError(error).replay(); if (this.isIncoming()) { promise = promise.then(function(dataMessage) { + this.removeConflictFor(number); this.handleDataMessage(dataMessage); }.bind(this)); } else { diff --git a/js/views/message_view.js b/js/views/message_view.js index 6add9a960..c8c2617bd 100644 --- a/js/views/message_view.js +++ b/js/views/message_view.js @@ -9,7 +9,7 @@ tagName: "li", template: $('#message').html(), initialize: function() { - this.listenTo(this.model, 'change:errors', this.renderErrors); + this.listenTo(this.model, 'change:errors', this.onErrorsChanged); this.listenTo(this.model, 'change:body', this.render); this.listenTo(this.model, 'change:delivered', this.renderDelivered); this.listenTo(this.model, 'change', this.renderSent); @@ -44,6 +44,13 @@ renderDelivered: function() { if (this.model.get('delivered')) { this.$el.addClass('delivered'); } }, + onErrorsChanged: function() { + if (this.model.isIncoming()) { + this.render(); + } else { + this.renderErrors(); + } + }, renderErrors: function() { var errors = this.model.get('errors'); if (_.size(errors) > 0) {