diff --git a/src/views/backups.html b/src/views/backups.html
index 6f4ffa98c..16fa287fb 100644
--- a/src/views/backups.html
+++ b/src/views/backups.html
@@ -177,6 +177,10 @@
Cloudron makes a complete backup of your system based on this configuration.
@@ -219,33 +223,51 @@
-
- Backup ID
-
-
-
{{ lastBackup.id }}
-
No backups have been made yet
+
+
+
+
+
Listing
+
+
+
-
- Last backup
-
-
-
{{ lastBackup.creationTime | prettyDate }}
-
-
+
+
+
+
+
No backups have been made yet
+
+
+
+
+ | |
+ Version |
+ Contents |
+ Date |
+ Actions |
+
+
+
+
+
|
+ v{{ backup.packageVersion }} |
+ {{ backup.dependsOn.length }} app(s) |
+ {{ backup.creationTime | prettyDate }} |
+
+
+ |
+
+
+
-
- For Cloudron restore or migration, download the backup configuration.
-
-
-
-
@@ -263,9 +285,9 @@
-
+
-
+
diff --git a/src/views/backups.js b/src/views/backups.js
index 82c36c387..719d56590 100644
--- a/src/views/backups.js
+++ b/src/views/backups.js
@@ -129,9 +129,10 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
message: '',
errorMessage: '',
taskId: '',
+ taskType: '',
checkStatus: function () {
- Client.getLatestTaskByType('backup', function (error, task) {
+ Client.getLatestTaskByType($scope.createBackup.taskType, function (error, task) {
if (error) return console.error(error);
if (!task) return;
@@ -166,6 +167,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
$scope.createBackup.percent = 0;
$scope.createBackup.message = '';
$scope.createBackup.errorMessage = '';
+ $scope.createBackup.taskType = 'backup';
Client.startBackup(function (error, taskId) {
if (error) {
@@ -189,7 +191,22 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
});
},
- stopBackup: function () {
+ startCleanup: function () {
+ $scope.createBackup.busy = true;
+ $scope.createBackup.percent = 0;
+ $scope.createBackup.message = '';
+ $scope.createBackup.errorMessage = '';
+ $scope.createBackup.taskType = 'cleanBackups';
+
+ Client.cleanupBackups(function (error, taskId) {
+ if (error) console.error(error);
+
+ $scope.createBackup.taskId = taskId;
+ $scope.createBackup.updateStatus();
+ });
+ },
+
+ stopTask: function () {
Client.stopTask($scope.createBackup.taskId, function (error) {
if (error) {
if (error.statusCode === 409) {
@@ -207,6 +224,22 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
}
};
+ $scope.listBackups = {
+ copyBackupIdDone: false,
+
+ copyBackupId: function (backup) {
+ var copyText = document.getElementById('backupIdHelper');
+ copyText.value = backup.id;
+ copyText.select();
+ document.execCommand('copy');
+
+ $scope.listBackups.copyBackupIdDone = true;
+
+ // reset after 2.5sec
+ $timeout(function () { $scope.listBackups.copyBackupIdDone = false; }, 2500);
+ },
+ };
+
$scope.s3like = function (provider) {
return provider === 's3' || provider === 'minio' || provider === 's3-v4-compat'
|| provider === 'exoscale-sos' || provider === 'digitalocean-spaces'
@@ -228,9 +261,10 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
document.body.removeChild(element);
}
- $scope.downloadConfig = function () {
+ $scope.downloadConfig = function (backup) {
// secrets and tokens already come with placeholder characters we remove them
var tmp = {
+ backupId: backup.id,
encrypted: !!$scope.backupConfig.password // we add this just to help the import UI
};