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…
	
	Add table
		Add a link
		
	
		Reference in a new issue