You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
(function () {
 | 
						|
    'use strict';
 | 
						|
 | 
						|
    window.Whisper = window.Whisper || {};
 | 
						|
 | 
						|
    Whisper.NetworkStatusView = Whisper.View.extend({
 | 
						|
        className: 'network-status',
 | 
						|
        templateName: 'networkStatus',
 | 
						|
        initialize: function() {
 | 
						|
            this.$el.hide();
 | 
						|
 | 
						|
            this.renderIntervalHandle = setInterval(this.update.bind(this), 5000);
 | 
						|
            extension.windows.onClosed(function () {
 | 
						|
                clearInterval(this.renderIntervalHandle);
 | 
						|
            }.bind(this));
 | 
						|
 | 
						|
            setTimeout(this.finishConnectingGracePeriod.bind(this), 5000);
 | 
						|
 | 
						|
            this.withinConnectingGracePeriod = true;
 | 
						|
            this.setSocketReconnectInterval(null);
 | 
						|
 | 
						|
            window.addEventListener('online', this.update.bind(this));
 | 
						|
            window.addEventListener('offline', this.update.bind(this));
 | 
						|
 | 
						|
            this.model = new Backbone.Model();
 | 
						|
            this.listenTo(this.model, 'change', this.onChange);
 | 
						|
        },
 | 
						|
        events: {
 | 
						|
            'click .openInstaller': extension.install
 | 
						|
        },
 | 
						|
        onReconnectTimer: function() {
 | 
						|
          this.setSocketReconnectInterval(60000);
 | 
						|
        },
 | 
						|
        finishConnectingGracePeriod: function() {
 | 
						|
            this.withinConnectingGracePeriod = false;
 | 
						|
        },
 | 
						|
        setSocketReconnectInterval: function(millis) {
 | 
						|
            this.socketReconnectWaitDuration = moment.duration(millis);
 | 
						|
        },
 | 
						|
        navigatorOnLine: function() { return navigator.onLine; },
 | 
						|
        getSocketStatus: function() { return window.getSocketStatus(); },
 | 
						|
        getNetworkStatus: function() {
 | 
						|
 | 
						|
            var message = '';
 | 
						|
            var instructions = '';
 | 
						|
            var hasInterruption = false;
 | 
						|
            var action = null;
 | 
						|
            var buttonClass = null;
 | 
						|
 | 
						|
            var socketStatus = this.getSocketStatus();
 | 
						|
            switch(socketStatus) {
 | 
						|
                case WebSocket.CONNECTING:
 | 
						|
                    message = i18n('connecting');
 | 
						|
                    this.setSocketReconnectInterval(null);
 | 
						|
                    break;
 | 
						|
                case WebSocket.OPEN:
 | 
						|
                    this.setSocketReconnectInterval(null);
 | 
						|
                    break;
 | 
						|
                case WebSocket.CLOSING:
 | 
						|
                    message = i18n('disconnected');
 | 
						|
                    instructions = i18n('checkNetworkConnection');
 | 
						|
                    hasInterruption = true;
 | 
						|
                break;
 | 
						|
                case WebSocket.CLOSED:
 | 
						|
                    message = i18n('disconnected');
 | 
						|
                    instructions = i18n('checkNetworkConnection');
 | 
						|
                    hasInterruption = true;
 | 
						|
                break;
 | 
						|
            }
 | 
						|
 | 
						|
            if (socketStatus == WebSocket.CONNECTING && !this.withinConnectingGracePeriod) {
 | 
						|
                hasInterruption = true;
 | 
						|
            }
 | 
						|
            if (this.socketReconnectWaitDuration.asSeconds() > 0) {
 | 
						|
                instructions = i18n('attemptingReconnection', [this.socketReconnectWaitDuration.asSeconds()]);
 | 
						|
            }
 | 
						|
            if (!this.navigatorOnLine()) {
 | 
						|
                hasInterruption = true;
 | 
						|
                message = i18n('offline');
 | 
						|
                instructions = i18n('checkNetworkConnection');
 | 
						|
            } else if (!Whisper.Registration.isDone()) {
 | 
						|
                hasInterruption = true;
 | 
						|
                message = i18n('Unlinked');
 | 
						|
                instructions = i18n('unlinkedWarning');
 | 
						|
                action = i18n('relink');
 | 
						|
                buttonClass = 'openInstaller';
 | 
						|
            }
 | 
						|
 | 
						|
            return {
 | 
						|
                message: message,
 | 
						|
                instructions: instructions,
 | 
						|
                hasInterruption: hasInterruption,
 | 
						|
                action: action,
 | 
						|
                buttonClass: buttonClass
 | 
						|
            };
 | 
						|
        },
 | 
						|
        update: function() {
 | 
						|
            var status = this.getNetworkStatus();
 | 
						|
            this.model.set(status);
 | 
						|
        },
 | 
						|
        render_attributes: function() {
 | 
						|
            return this.model.attributes;
 | 
						|
        },
 | 
						|
        onChange: function() {
 | 
						|
            this.render();
 | 
						|
            if (this.model.attributes.hasInterruption) {
 | 
						|
                this.$el.slideDown();
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                this.$el.hide();
 | 
						|
            }
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
 | 
						|
 | 
						|
})();
 |