From aca3db97da505cce61fa0aa6e56bda921eded309 Mon Sep 17 00:00:00 2001 From: lilia Date: Fri, 30 Jan 2015 11:20:59 -1000 Subject: [PATCH] New messages auto-update the inbox & conversation When a new message arrives, if its conversation is not already opened, the background page opens it. If it is alrady open the window is focused. Finally, the 'message' event is triggered, resulting in 1. the inbox refetches conversations 2. all conversations fetch new messages TODO: only send this event to the target window --- js/background.js | 1 + js/conversation_panel.js | 1 + js/views/conversation_view.js | 5 +++++ js/views/inbox_view.js | 7 +++---- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/js/background.js b/js/background.js index 4bc17d3321..904e7a9eeb 100644 --- a/js/background.js +++ b/js/background.js @@ -194,6 +194,7 @@ conversation.save().then(function() { message.save().then(function() { extension.trigger('message', message); // notify frontend listeners + openConversation(conversation.id); }); }); }); diff --git a/js/conversation_panel.js b/js/conversation_panel.js index a79dd7a156..e3d341288f 100644 --- a/js/conversation_panel.js +++ b/js/conversation_panel.js @@ -26,6 +26,7 @@ new Whisper.ConversationView({ model: conversation }).render().$el.prependTo($('body')); + window.conversation = conversation; }); }; diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js index 74fe4f8afd..9e3b6b2dd4 100644 --- a/js/views/conversation_view.js +++ b/js/views/conversation_view.js @@ -42,6 +42,11 @@ if (this.model.id) { this.model.fetchMessages({reset: true}); } + + extension.on('message', function() { + this.model.fetchMessages(); + }.bind(this)); + window.addEventListener('resize', this.view.resize.bind(this.view)); }, diff --git a/js/views/inbox_view.js b/js/views/inbox_view.js index d7d346c65e..288bfc94d0 100644 --- a/js/views/inbox_view.js +++ b/js/views/inbox_view.js @@ -38,12 +38,11 @@ this.$el.addClass('loading'); this.conversations.fetchActive({reset: true}).then(function() { this.$el.removeClass('loading'); + window.conversations = this.conversations; }.bind(this)); - extension.on('message', function(message) { - this.conversations.fetch({id: message.conversationId}).then(function() { - this.conversations.get(message.conversationId).fetchMessages(); - }.bind(this)); + extension.on('message', function() { + this.conversations.fetchActive({reset: true}); }.bind(this)); window.addEventListener('resize', this.inbox.resize.bind(this.inbox)); },