Add reconnect handler and make reboot state better reflected in the notfications
This commit is contained in:
@@ -85,10 +85,24 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
|
||||
}
|
||||
|
||||
function defaultErrorHandler(callback) {
|
||||
function handleServerOffline() {
|
||||
if (client.offline) return;
|
||||
client.offline = true;
|
||||
|
||||
(function onlineCheck() {
|
||||
$http.get(client.apiOrigin + '/api/v1/cloudron/status', {}).success(function (data, status) {
|
||||
client.offline = false;
|
||||
client._reconnectListener.forEach(function (handler) { handler(); });
|
||||
}).error(function (data, status) {
|
||||
$timeout(onlineCheck, 5000);
|
||||
});
|
||||
})();
|
||||
}
|
||||
|
||||
return function (data, status) {
|
||||
// handle request killed by browser (eg. cors issue)
|
||||
if (data === null && status === -1) {
|
||||
client.offline = true;
|
||||
handleServerOffline();
|
||||
return callback(new ClientError('Request cancelled by browser'));
|
||||
}
|
||||
|
||||
@@ -103,7 +117,7 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
|
||||
}
|
||||
|
||||
if (status >= 500) {
|
||||
client.offline = true;
|
||||
handleServerOffline();
|
||||
return callback(new ClientError(status, data));
|
||||
}
|
||||
|
||||
@@ -118,7 +132,6 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
|
||||
|
||||
function defaultSuccessHandler(callback) {
|
||||
return function (data, status) {
|
||||
client.offline = false;
|
||||
return callback(null, data, status);
|
||||
};
|
||||
}
|
||||
@@ -206,6 +219,7 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
|
||||
this._ready = false;
|
||||
this._configListener = [];
|
||||
this._readyListener = [];
|
||||
this._reconnectListener = [];
|
||||
this._userInfo = {
|
||||
id: null,
|
||||
username: null,
|
||||
@@ -318,6 +332,11 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
|
||||
if (this._config && this._config.apiServerOrigin) callback(this._config);
|
||||
};
|
||||
|
||||
Client.prototype.onReconnect = function (callback) {
|
||||
if (this._ready) callback();
|
||||
else this._reconnectListener.push(callback);
|
||||
};
|
||||
|
||||
Client.prototype.resetAvatar = function () {
|
||||
this.avatar = this.apiOrigin + '/api/v1/cloudron/avatar?' + String(Math.random()).slice(2);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user