diff --git a/src/views/app.html b/src/views/app.html
index c37653680..d2213620c 100644
--- a/src/views/app.html
+++ b/src/views/app.html
@@ -549,13 +549,15 @@
This creates a snapshot of the app. You can use this snapshot to restore or clone this app.
-
+
-
{{ app.message }}
+
{{ backups.taskMessage }}
+
+
diff --git a/src/views/app.js b/src/views/app.js
index 07b785b93..537d65cb9 100644
--- a/src/views/app.js
+++ b/src/views/app.js
@@ -495,12 +495,16 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
$scope.backups = {
busy: false,
+ busyCreate: false,
error: {},
copyBackupIdDone: false,
enableBackup: false,
backups: [],
+ taskProgress: 0,
+ taskMessage: '',
+
copyBackupId: function (backup) {
var copyText = document.getElementById('backupIdHelper');
copyText.value = backup.id;
@@ -513,11 +517,18 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
$timeout(function () { $scope.backups.copyBackupIdDone = false; }, 2500);
},
- createBackup: function () {
- Client.backupApp($scope.app.id, function (error) {
+ trackBackupTask: function () {
+ $scope.backups.busyCreate = true;
+
+ refreshApp(function (error) {
if (error) Client.error(error);
- trackAppTask(function (error) {
+ $scope.backups.busyCreate = false;
+
+ trackAppTask(function (data) {
+ $scope.backups.taskProgress = data.percent;
+ $scope.backups.taskMessage = data.message;
+ }, function (error) {
if (error) return Client.error(error);
$scope.backups.show();
@@ -525,6 +536,18 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
});
},
+ createBackup: function () {
+ $scope.backups.busyCreate = true;
+ $scope.backups.taskProgress = 0;
+ $scope.backups.taskMessage = '';
+
+ Client.backupApp($scope.app.id, function (error) {
+ if (error) Client.error(error);
+
+ $scope.backups.trackBackupTask();
+ });
+ },
+
show: function () {
var app = $scope.app;
@@ -765,12 +788,20 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
});
}
- function trackAppTask(callback) {
+ function trackAppTask(progressCallback, callback) {
+ progressCallback = progressCallback || function () {};
callback = callback || function (error) { if (error) Client.error(error); };
- // app will be refreshed on interval
- if ($scope.app.taskId) $timeout(trackAppTask.bind(null, callback), 2000); // not yet done
- else callback();
+ if (!$scope.app.taskId) return callback();
+
+ Client.getTask($scope.app.taskId, function (error, result) {
+ if (error) console.error(error);
+
+ progressCallback(result);
+
+ // app will be refreshed on interval
+ $timeout(trackAppTask.bind(null, progressCallback, callback), 2000); // not yet done
+ });
}
Client.onReady(function () {
@@ -782,6 +813,9 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
$scope.setView($routeParams.view || 'display');
+ // track on page load backup if active
+ if (app.installationState === ISTATES.PENDING_BACKUP) $scope.backups.trackBackupTask();
+
asyncSeries([
fetchUsers,
fetchGroups,