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 4bc17d332..904e7a9ee 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 a79dd7a15..e3d341288 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 74fe4f8af..9e3b6b2dd 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 d7d346c65..288bfc94d 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)); },