diff --git a/js/models/conversations.js b/js/models/conversations.js index 735194a10..9ae7e5112 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -98,50 +98,20 @@ else { sendFunc = textsecure.messaging.sendMessageToGroup; } - sendFunc(this.get('id'), body, attachments, now).then(function() { - message.save({'sent': true}); - }.bind(this)).catch(function(errors) { - if (errors instanceof Error) { - errors = [errors]; - } - var keyErrors = []; - _.each(errors, function(e) { - console.log(e); - console.log(e.stack); - if (e.error.name === 'OutgoingIdentityKeyError') { - keyErrors.push(e.error); - } - }); - if (keyErrors.length) { - message.save({ errors : keyErrors }); - } else { - if (!(errors instanceof Array)) { - errors = [errors]; - } - errors.map(function(e) { - if (e.error && e.error.stack) { - console.error(e.error.stack); - } - }); - throw errors; - } - }); + message.send(sendFunc(this.get('id'), body, attachments, now)); }, endSession: function() { if (this.isPrivate()) { var now = Date.now(); - var message = this.messageCollection.add({ + var message = this.messageCollection.create({ conversationId : this.id, type : 'outgoing', sent_at : now, received_at : now, flags : textsecure.protobuf.DataMessage.Flags.END_SESSION }); - message.save(); - textsecure.messaging.closeSession(this.id).then(function() { - message.save({sent: true}); - }); + message.send(textsecure.messaging.closeSession(this.id)); } }, @@ -154,40 +124,32 @@ group_update = this.pick(['name', 'avatar', 'members']); } var now = Date.now(); - var message = this.messageCollection.add({ + var message = this.messageCollection.create({ conversationId : this.id, type : 'outgoing', sent_at : now, received_at : now, group_update : group_update }); - message.save(); - textsecure.messaging.updateGroup( + message.send(textsecure.messaging.updateGroup( this.id, this.get('name'), this.get('avatar'), this.get('members') - ).catch(function(errors) { - message.save({errors: errors.map(function(e){return e.error;})}); - }).then(function() { - message.save({sent: true}); - }); + )); }, leaveGroup: function() { var now = Date.now(); if (this.get('type') === 'group') { - var message = this.messageCollection.add({ + var message = this.messageCollection.create({ group_update: { left: 'You' }, conversationId : this.id, type : 'outgoing', sent_at : now, received_at : now }); - message.save(); - textsecure.messaging.leaveGroup(this.id).then(function() { - message.save({sent: true}); - }); + message.send(textsecure.messaging.leaveGroup(this.id)); } }, diff --git a/js/models/messages.js b/js/models/messages.js index 806f9d3e3..da99fc390 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -131,6 +131,39 @@ e.number === number; }); }, + + send: function(promise) { + return promise.then(function() { + this.save({sent: true}); + }.bind(this)).catch(function(errors) { + this.save({sent: true}); + if (errors instanceof Error) { + errors = [errors]; + } + var keyErrors = []; + _.each(errors, function(e) { + console.log(e); + console.log(e.stack); + if (e.error.name === 'OutgoingIdentityKeyError') { + keyErrors.push(e.error); + } + }); + if (keyErrors.length) { + message.save({ errors : keyErrors }); + } else { + if (!(errors instanceof Array)) { + errors = [errors]; + } + errors.map(function(e) { + if (e.error && e.error.stack) { + console.error(e.error.stack); + } + }); + throw errors; + } + }.bind(this)); + }, + resolveConflict: function(number) { var error = this.getKeyConflict(number); if (error) {