diff --git a/background.html b/background.html index 59fc3bab..baccbe84 100644 --- a/background.html +++ b/background.html @@ -281,6 +281,7 @@ + diff --git a/js/background.js b/js/background.js index 7410bb40..78b04b17 100644 --- a/js/background.js +++ b/js/background.js @@ -18,6 +18,18 @@ textsecure.protocol_wrapper.startWorker(); + ConversationController.updateInbox(); + + extension.onLaunched(function() { + storage.onready(function() { + if (textsecure.registration.isDone()) { + openInbox(); + } else { + extension.install(); + } + }); + }); + storage.fetch(); storage.onready(function() { var messageReceiver; @@ -27,6 +39,8 @@ } extension.on('registration_done', init); + setUnreadCount(storage.get("unreadCount", 0)); + window.getSocketStatus = function() { if (messageReceiver) { return messageReceiver.getStatus(); diff --git a/js/conversation_controller.js b/js/conversation_controller.js new file mode 100644 index 00000000..8aa817c6 --- /dev/null +++ b/js/conversation_controller.js @@ -0,0 +1,73 @@ +/*global $, Whisper, Backbone, textsecure, extension*/ +/* + * vim: ts=4:sw=4:expandtab + */ + +// This script should only be included in background.html +(function () { + 'use strict'; + + window.Whisper = window.Whisper || {}; + + var conversations = new Whisper.ConversationCollection(); + var inboxCollection = new (Backbone.Collection.extend({ + initialize: function() { + this.on('change:active_at', this.sort); + this.on('change:unreadCount', this.updateUnreadCount); + + this.listenTo(conversations, 'add change:active_at', this.addActive); + }, + comparator: function(model) { + return -model.get('active_at'); + }, + addActive: function(model) { + if (model.get('active_at')) { + this.add(model); + } else { + this.remove(model); + } + }, + updateUnreadCount: function(model, count) { + var prev = model.previous('unreadCount') || 0; + if (count < prev) { // decreased + var newUnreadCount = storage.get("unreadCount", 0) - (prev - count); + setUnreadCount(newUnreadCount); + storage.put("unreadCount", newUnreadCount); + } + } + }))(); + + window.getInboxCollection = function() { + return inboxCollection; + }; + + window.ConversationController = { + get: function(id) { + return conversations.get(id); + }, + create: function(attrs) { + var conversation = conversations.add(attrs); + return conversation; + }, + findOrCreatePrivateById: function(id) { + var conversation = conversations.add({ id: id, type: 'private' }); + return new Promise(function(resolve, reject) { + conversation.fetch().then(function() { + resolve(conversation); + }).fail(function() { + var saved = conversation.save(); // false or indexedDBRequest + if (saved) { + saved.then(function() { + resolve(conversation); + }).fail(reject); + } else { + reject(); + } + }); + }); + }, + updateInbox: function() { + conversations.fetchActive(); + } + }; +})(); diff --git a/js/panel_controller.js b/js/panel_controller.js index 3aca9ced..692c771c 100644 --- a/js/panel_controller.js +++ b/js/panel_controller.js @@ -9,78 +9,13 @@ window.Whisper = window.Whisper || {}; - var conversations = new Whisper.ConversationCollection(); - var inboxCollection = new (Backbone.Collection.extend({ - initialize: function() { - this.on('change:active_at', this.sort); - this.on('change:unreadCount', this.updateUnreadCount); - - this.listenTo(conversations, 'add change:active_at', this.addActive); - }, - comparator: function(model) { - return -model.get('active_at'); - }, - addActive: function(model) { - if (model.get('active_at')) { - this.add(model); - } else { - this.remove(model); - } - }, - updateUnreadCount: function(model, count) { - var prev = model.previous('unreadCount') || 0; - if (count < prev) { // decreased - var newUnreadCount = storage.get("unreadCount", 0) - (prev - count); - setUnreadCount(newUnreadCount); - storage.put("unreadCount", newUnreadCount); - } - } - }))(); - - window.getInboxCollection = function() { - return inboxCollection; - }; - - window.ConversationController = { - get: function(id) { - return conversations.get(id); - }, - create: function(attrs) { - var conversation = conversations.add(attrs); - return conversation; - }, - findOrCreatePrivateById: function(id) { - var conversation = conversations.add({ id: id, type: 'private' }); - return new Promise(function(resolve, reject) { - conversation.fetch().then(function() { - resolve(conversation); - }).fail(function() { - var saved = conversation.save(); // false or indexedDBRequest - if (saved) { - saved.then(function() { - resolve(conversation); - }).fail(reject); - } else { - reject(); - } - }); - }); - }, - updateInbox: function() { - conversations.fetchActive(); - } - }; - - ConversationController.updateInbox(); - setUnreadCount(storage.get("unreadCount", 0)); - - function setUnreadCount(count) { + window.setUnreadCount = function(count) { if (count > 0) { extension.navigator.setBadgeText(count); } else { extension.navigator.setBadgeText(""); } - } + }; window.notifyConversation = function(message) { var conversationId = message.get('conversationId'); @@ -176,14 +111,4 @@ open = null; return o; }; - - extension.onLaunched(function() { - storage.onready(function() { - if (textsecure.registration.isDone()) { - openInbox(); - } else { - extension.install(); - } - }); - }); })();