diff --git a/src/js/client.js b/src/js/client.js index b4a26e58a..21d984461 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -565,7 +565,14 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N }).error(defaultErrorHandler(callback)); }; - Client.prototype.getTaskProgress = function (taskId, callback) { + Client.prototype.getLatestTaskByType = function (type, callback) { + get('/api/v1/tasks?page=1&per_page=1&type=' + type).success(function (data, status) { + if (status !== 200 || typeof data !== 'object') return callback(new ClientError(status, data)); + callback(null, data.tasks[0] || null); + }).error(defaultErrorHandler(callback)); + }; + + Client.prototype.getTask = function (taskId, callback) { get('/api/v1/tasks/' + taskId).success(function (data, status) { if (status !== 200 || typeof data !== 'object') return callback(new ClientError(status, data)); callback(null, data); @@ -575,7 +582,7 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N Client.prototype.startBackup = function (callback) { post('/api/v1/backups').success(function(data, status) { if (status !== 202 || typeof data !== 'object') return callback(new ClientError(status, data)); - callback(null, data); + callback(null, data.taskId); }).error(defaultErrorHandler(callback)); }; @@ -927,7 +934,7 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N post('/api/v1/cloudron/update', data).success(function(data, status) { if (status !== 202 || typeof data !== 'object') return callback(new ClientError(status, data)); - callback(null, data); + callback(null, data.taskId); }).error(defaultErrorHandler(callback)); }; diff --git a/src/views/backups.js b/src/views/backups.js index 6e639f2bf..114a2a5db 100644 --- a/src/views/backups.js +++ b/src/views/backups.js @@ -87,9 +87,19 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat message: '', errorMessage: '', - updateStatus: function () { - Client.getTaskProgress('backup', function (error, data) { - if (error) return window.setTimeout($scope.createBackup.updateStatus, 250); + checkStatus: function () { + Client.getLatestTaskByType('backup', function (error, task) { + if (error) return console.error(error); + + if (!task) return; + + $scope.createBackup.updateStatus(task.id); + }); + }, + + updateStatus: function (taskId) { + Client.getTask(taskId, function (error, data) { + if (error) return window.setTimeout($scope.createBackup.updateStatus.bind(null, taskId), 5000); if (!data.active) { $scope.createBackup.busy = false; @@ -103,7 +113,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.createBackup.busy = true; $scope.createBackup.percent = data.percent; $scope.createBackup.message = data.message; - window.setTimeout($scope.createBackup.updateStatus, 500); + window.setTimeout($scope.createBackup.updateStatus.bind(null, taskId), 500); }); }, @@ -115,7 +125,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.createBackup.result = ''; $scope.createBackup.errorMessage = ''; - Client.startBackup(function (error) { + Client.startBackup(function (error, taskId) { if (error) { if (error.statusCode === 409 && error.message.indexOf('full_backup') !== -1) { $scope.createBackup.errorMessage = 'Backup already in progress. Please retry later.'; @@ -132,7 +142,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat return; } - $scope.createBackup.updateStatus(); + $scope.createBackup.updateStatus(taskId); }); }, @@ -369,7 +379,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat if (!$scope.config.managed) getBackupConfig(); // show backup status - $scope.createBackup.updateStatus(); + $scope.createBackup.checkStatus(); }); function readFileLocally(obj, file, fileName) { diff --git a/src/views/settings.js b/src/views/settings.js index f377cd22d..e98767191 100644 --- a/src/views/settings.js +++ b/src/views/settings.js @@ -60,9 +60,17 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca }); }, - updateStatus: function () { - Client.getTaskProgress('update', function (error, data) { - if (error) return window.setTimeout($scope.update.updateStatus, 2000); + checkStatus: function () { + Client.getLatestTaskByType('update', function (error, taskId) { + if (error) return console.error(error); + + $scope.update.updateStatus(taskId); + }); + }, + + updateStatus: function (taskId) { + Client.getTask(taskId, function (error, data) { + if (error) return window.setTimeout($scope.update.updateStatus.bind(null, taskId), 2000); if (!data.active) { $scope.update.busy = false; @@ -79,7 +87,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca $scope.update.percent = data.percent; $scope.update.message = data.message; - window.setTimeout($scope.update.updateStatus, 500); + window.setTimeout($scope.update.updateStatus.bind(null, taskId), 500); }); }, @@ -90,7 +98,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca $scope.update.message = ''; $scope.update.errorMessage = ''; - Client.update(function (error) { + Client.update(function (error, taskId) { if (error) { $scope.update.error.generic = error.message; $scope.update.busy = false; @@ -99,7 +107,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca $('#updateModal').modal('hide'); - $scope.update.updateStatus(); + $scope.update.updateStatus(taskId); }); } }; @@ -446,7 +454,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca Client.onReady(function () { getAutoupdatePattern(); - $scope.update.updateStatus(); + $scope.update.checkStatus(); if ($scope.config.provider === 'caas') { Client.getCaasConfig(function (error, caasConfig) {