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();
- }
- });
- });
})();