Debounce updates to notifications and other events
Wait for one second of silence before displaying new notifications, updating the unread count and conversation list previews. Fixes #470
This commit is contained in:
parent
ca28ba69d6
commit
bb2868f1ec
3 changed files with 12 additions and 8 deletions
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in a new issue