diff --git a/src/js/client.js b/src/js/client.js
index e9df940f8..16a16cb90 100644
--- a/src/js/client.js
+++ b/src/js/client.js
@@ -725,6 +725,15 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
});
};
+ Client.prototype.editAppBackup = function (id, backupId, label, preserveSecs, callback) {
+ post('/api/v1/apps/' + id + '/backups/' + backupId, { label: label, preserveSecs: preserveSecs }, null, function (error, data, status) {
+ if (error) return callback(error);
+ if (status !== 200) return callback(new ClientError(status, data));
+
+ callback(null);
+ });
+ };
+
Client.prototype.updateApp = function (id, manifest, options, callback) {
var data = {
appStoreId: manifest.id + '@' + manifest.version,
diff --git a/src/views/app.html b/src/views/app.html
index 49f29595a..272376fe4 100644
--- a/src/views/app.html
+++ b/src/views/app.html
@@ -69,6 +69,40 @@
+
+
+
@@ -1289,12 +1323,13 @@
-
|
+ |
+
v{{ backup.packageVersion }} |
- {{ backup.creationTime | prettyDate }} |
+ {{ backup.creationTime | prettyDate }} ({{ backup.label }}) |
-
+
|
diff --git a/src/views/app.js b/src/views/app.js
index c47be9e89..3b11a94b6 100644
--- a/src/views/app.js
+++ b/src/views/app.js
@@ -1203,6 +1203,14 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
});
},
+ refresh: function () {
+ Client.getAppBackups($scope.app.id, function (error, backups) {
+ if (error) return Client.error(error);
+
+ $scope.backups.backups = backups;
+ });
+ },
+
toggleAutomaticBackups: function () {
$scope.backups.busyAutomaticBackups = true;
$scope.backups.error = {};
@@ -1424,6 +1432,48 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
},
};
+ $scope.editBackup = {
+ busy: false,
+ error: null,
+ backup: null,
+
+ label: '',
+ persist: false,
+
+ show: function (backup) {
+ $scope.editBackup.backup = backup;
+ $scope.editBackup.label = backup.label;
+ $scope.editBackup.persist = backup.preserveSecs === -1;
+ $scope.editBackup.error = null;
+ $scope.editBackup.busy = false;
+
+ $('#editBackupModal').modal('show');
+ },
+
+ submit: function () {
+ $scope.editBackup.error = null;
+ $scope.editBackup.busy = true;
+
+ Client.editAppBackup($scope.app.id, $scope.editBackup.backup.id, $scope.editBackup.label, $scope.editBackup.persist ? -1 : 0, function (error) {
+ $scope.editBackup.busy = false;
+ if (error) return $scope.editBackup.error = error.message;
+
+ $scope.backups.refresh();
+
+ $('#editBackupModal').modal('hide');
+ });
+ }
+ };
+
+ $scope.backupDetails = {
+ backup: null,
+
+ show: function (backup) {
+ $scope.backupDetails.backup = backup;
+ $('#backupDetailsModal').modal('show');
+ }
+ };
+
$scope.uninstall = {
busy: false,
error: {},
@@ -2014,7 +2064,7 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
};
// setup all the dialog focus handling
- ['appUninstallModal', 'appUpdateModal', 'appRestoreModal', 'appCloneModal'].forEach(function (id) {
+ ['appUninstallModal', 'appUpdateModal', 'appRestoreModal', 'appCloneModal', 'editBackupModal'].forEach(function (id) {
$('#' + id).on('shown.bs.modal', function () {
$(this).find('[autofocus]:first').focus();
});