From 44b1e5c88e0771a26c785bbd57e13316ad8180e7 Mon Sep 17 00:00:00 2001 From: lilia Date: Tue, 10 Feb 2015 15:27:26 -0800 Subject: [PATCH] Move inbox collection to the background page No more waiting, no more messy fetch logic. Background page bootstraps the inbox and keeps it up to date. --- background.html | 1 + js/inbox_controller.js | 46 ++++++++++++++++++++++++++++++++++++++ js/models/conversations.js | 12 +--------- js/views/inbox_view.js | 15 ++----------- js/views/list_view.js | 5 +++++ 5 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 js/inbox_controller.js diff --git a/background.html b/background.html index 18a72e18..b7759385 100644 --- a/background.html +++ b/background.html @@ -24,6 +24,7 @@ + diff --git a/js/inbox_controller.js b/js/inbox_controller.js new file mode 100644 index 00000000..e28682e1 --- /dev/null +++ b/js/inbox_controller.js @@ -0,0 +1,46 @@ +/* vim: ts=4:sw=4:expandtab + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +;(function() { + 'use strict'; + + /* + * Provides a persistent collection of conversations for + * the inbox view. Automatically updates when messages are received. + * + */ + + window.inbox = new Whisper.ConversationCollection([], { + comparator: function(model) { + return -model.active_at; + } + }); + + function fetch() { + window.inbox.fetch({ + reset: true, + index: { + name: 'inbox', // 'inbox' index on active_at + order: 'desc' // ORDER timestamp DESC + } + // TODO pagination/infinite scroll + // limit: 10, offset: page*10, + }); + } + + extension.on('message', fetch); + fetch(); +})(); diff --git a/js/models/conversations.js b/js/models/conversations.js index 1fcf3398..d20ad5f8 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -229,17 +229,7 @@ only: number } }); - }, - - fetchActive: function(options) { - return this.fetch(_.extend(options, { - index: { - name: 'inbox', // 'inbox' index on active_at - order: 'desc' // ORDER timestamp DESC - } - // TODO pagination/infinite scroll - // limit: 10, offset: page*10, - })); } + }); })(); diff --git a/js/views/inbox_view.js b/js/views/inbox_view.js index 08a163dc..0e5a496b 100644 --- a/js/views/inbox_view.js +++ b/js/views/inbox_view.js @@ -29,22 +29,11 @@ this.newConversationView = new Whisper.NewConversationView(); this.newConversationView.$el.hide().appendTo(this.$gutter); - this.conversations = new Whisper.ConversationCollection(); this.inbox = new Whisper.ConversationListView({ el : this.$contacts, - collection : this.conversations - }); + collection : bg.inbox + }).render(); - this.$el.addClass('loading'); - this.conversations.fetchActive({reset: true}).then(function() { - this.inbox.resize(); - this.$el.removeClass('loading'); - window.conversations = this.conversations; // debug - }.bind(this)); - - extension.on('message', function() { - this.conversations.fetchActive({reset: true}); - }.bind(this)); window.addEventListener('resize', this.inbox.resize.bind(this.inbox)); }, events: { diff --git a/js/views/list_view.js b/js/views/list_view.js index 96cee045..fce35ab4 100644 --- a/js/views/list_view.js +++ b/js/views/list_view.js @@ -55,6 +55,11 @@ var Whisper = Whisper || {}; this.$el.css('height', 'auto'); this.$el.css('overflow-y', 'auto'); } + }, + + render: function() { + this.addAll(); + return this; } }); })();