From b83ce7a0155f2480349dc9a6a1263c53ae1da13c Mon Sep 17 00:00:00 2001 From: lilia Date: Wed, 20 May 2015 15:52:25 -0700 Subject: [PATCH] Delay conversation creation til post-decrypt --- js/background.js | 73 +++++++++++++++++++------------------------ js/models/messages.js | 2 +- 2 files changed, 33 insertions(+), 42 deletions(-) diff --git a/js/background.js b/js/background.js index f0b2c5359..6382f37d1 100644 --- a/js/background.js +++ b/js/background.js @@ -53,51 +53,42 @@ var now = new Date().getTime(); var timestamp = pushMessage.timestamp.toNumber(); - var conversation = getConversation({ - id : pushMessage.source, - type : 'private' + var message = new Whisper.Message({ + source : pushMessage.source, + sourceDevice : pushMessage.sourceDevice, + relay : pushMessage.relay, + sent_at : timestamp, + received_at : now, + conversationId : pushMessage.source, + type : 'incoming' }); - conversation.fetch().always(function() { - var message = conversation.messageCollection.add({ - source : pushMessage.source, - sourceDevice : pushMessage.sourceDevice, - relay : pushMessage.relay, - sent_at : timestamp, - received_at : now, - conversationId : pushMessage.source, - type : 'incoming' - }); - - var newUnreadCount = storage.get("unreadCount", 0) + 1; - storage.put("unreadCount", newUnreadCount); - extension.navigator.setBadgeText(newUnreadCount); + var newUnreadCount = storage.get("unreadCount", 0) + 1; + storage.put("unreadCount", newUnreadCount); + extension.navigator.setBadgeText(newUnreadCount); - conversation.save().then(function() { - message.save().then(function() { - return new Promise(function(resolve) { - resolve(textsecure.protocol_wrapper.handleIncomingPushMessageProto(pushMessage).then( - function(pushMessageContent) { - message.handlePushMessageContent(pushMessageContent); - } - )); - }).catch(function(e) { - if (e.name === 'IncomingIdentityKeyError') { - message.save({ errors : [e] }).then(function() { - extension.trigger('updateInbox'); - notifyConversation(message); - }); - } else if (e.message === 'Bad MAC') { - message.save({ errors : [ _.pick(e, ['name', 'message'])]}).then(function() { - extension.trigger('updateInbox'); - notifyConversation(message); - }); - } else { - console.log(e); - throw e; - } + message.save().then(function() { + return new Promise(function(resolve) { + resolve(textsecure.protocol_wrapper.handleIncomingPushMessageProto(pushMessage).then( + function(pushMessageContent) { + message.handlePushMessageContent(pushMessageContent); + } + )); + }).catch(function(e) { + if (e.name === 'IncomingIdentityKeyError') { + message.save({ errors : [e] }).then(function() { + extension.trigger('updateInbox'); + notifyConversation(message); }); - }); + } else if (e.message === 'Bad MAC') { + message.save({ errors : [ _.pick(e, ['name', 'message'])]}).then(function() { + extension.trigger('updateInbox'); + notifyConversation(message); + }); + } else { + console.log(e); + throw e; + } }); }); } diff --git a/js/models/messages.js b/js/models/messages.js index 269475b01..baf542e65 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -17,7 +17,7 @@ 'use strict'; window.Whisper = window.Whisper || {}; - var Message = Backbone.Model.extend({ + var Message = window.Whisper.Message = Backbone.Model.extend({ database : Whisper.Database, storeName : 'messages', defaults : function() {