/*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; var newUnreadCount = storage.get("unreadCount", 0) - (prev - count); if (newUnreadCount < 0) { newUnreadCount = 0; } storage.remove("unreadCount"); storage.put("unreadCount", newUnreadCount); setUnreadCount(newUnreadCount); } }))(); window.getInboxCollection = function() { return inboxCollection; }; window.ConversationController = { get: function(id) { return conversations.get(id); }, create: function(attrs) { if (typeof attrs !== 'object') { throw new Error('ConversationController.create requires an object, got', attrs); } var conversation = conversations.add(attrs, {merge: true}); 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(); } }; })();