diff --git a/js/conversation_controller.js b/js/conversation_controller.js index 5ca8354f7..47b35addc 100644 --- a/js/conversation_controller.js +++ b/js/conversation_controller.js @@ -13,9 +13,12 @@ var inboxCollection = new (Backbone.Collection.extend({ initialize: function() { this.on('change:timestamp change:name change:number', this.sort); - this.on('add remove change:unreadCount', this.updateUnreadCount); this.listenTo(conversations, 'add change:active_at', this.addActive); + + this.on('add remove change:unreadCount', + _.debounce(this.updateUnreadCount.bind(this), 1000) + ); }, comparator: function(m1, m2) { var timestamp1 = m1.get('timestamp'); @@ -48,7 +51,7 @@ this.remove(model); } }, - updateUnreadCount: function(model, count) { + updateUnreadCount: function() { var newUnreadCount = _.reduce( this.map(function(m) { return m.get('unreadCount'); }), function(item, memo) { diff --git a/js/notifications.js b/js/notifications.js index b62110c71..92d375c71 100644 --- a/js/notifications.js +++ b/js/notifications.js @@ -14,7 +14,7 @@ Whisper.Notifications = new (Backbone.Collection.extend({ initialize: function() { - this.on('add', this.onAdd); + this.on('add', _.debounce(this.update.bind(this), 1000)); this.on('remove', this.onRemove); }, onclick: function() { @@ -30,6 +30,10 @@ this.clear(); }, update: function() { + extension.notification.clear(); + if (this.length === 0) { + return; + } var setting = storage.get('notification-setting') || 'message'; if (setting === SETTINGS.OFF) { return; @@ -116,10 +120,6 @@ var setting = this.getSetting(); return (setting === SETTINGS.MESSAGE || setting === SETTINGS.NAME); }, - onAdd: function() { - extension.notification.clear(); - this.update(); - }, onRemove: function() { if (this.length === 0) { extension.notification.clear(); diff --git a/js/views/conversation_list_item_view.js b/js/views/conversation_list_item_view.js index 5664e4283..be1fb4d14 100644 --- a/js/views/conversation_list_item_view.js +++ b/js/views/conversation_list_item_view.js @@ -16,7 +16,8 @@ 'click': 'select' }, initialize: function() { - this.listenTo(this.model, 'change', this.render); // auto update + // auto update + this.listenTo(this.model, 'change', _.debounce(this.render.bind(this), 1000)); this.listenTo(this.model, 'destroy', this.remove); // auto update this.listenTo(this.model, 'opened', this.markSelected); // auto update extension.windows.onClosed(this.stopListening.bind(this));