diff --git a/src/views/app.js b/src/views/app.js index 240786708..21c29a54d 100644 --- a/src/views/app.js +++ b/src/views/app.js @@ -828,7 +828,9 @@ angular.module('Application').controller('AppController', ['$scope', '$location' var app = $scope.app; - if (app.error && app.error.domain) { + var errorState = ($scope.app.error && $scope.app.error.installationState) || ISTATES.PENDING_CONFIGURE; + + if (errorState === ISTATES.PENDING_LOCATION_CHANGE) { $scope.repair.location = app.location; $scope.repair.domain = $scope.domains.filter(function (d) { return d.domain === app.domain; })[0]; $scope.repair.alternateDomains = $scope.app.alternateDomains; @@ -841,7 +843,7 @@ angular.module('Application').controller('AppController', ['$scope', '$location' }); } - if (app.error && app.error.backupId) { + if (errorState === ISTATES.PENDING_RESTORE) { Client.getAppBackups($scope.app.id, function (error, backups) { if (error) return Client.error(error); @@ -860,20 +862,52 @@ angular.module('Application').controller('AppController', ['$scope', '$location' $scope.repair.error = {}; $scope.repair.busy = true; + var errorState = ($scope.app.error && $scope.app.error.installationState) || ISTATES.PENDING_CONFIGURE; var data = {}; - if ($scope.app.error && $scope.app.error.domain) { + var repairFunc; + + switch (errorState) { + case ISTATES.PENDING_INSTALL: + case ISTATES.PENDING_CLONE: // if manifest or bad image, use CLI to provide new manifest + repairFunc = Client.repairApp.bind(null, $scope.app.id, {}); // this will trigger a re-install + break; + + case ISTATES.PENDING_LOCATION_CHANGE: data.location = $scope.repair.location; data.domain = $scope.repair.domain.domain; data.alternateDomains = $scope.repair.alternateDomains.filter(function (a) { return a.enabled; }) .map(function (d) { return { subdomain: d.subdomain, domain: d.domain.domain }; }); data.overwriteDns = true; // always overwriteDns. user can anyway check and uncheck above + repairFunc = Client.configureApp.bind(null, $scope.app.id, 'location', data); + break; + + case ISTATES.PENDING_DATA_DIR_MIGRATION: + repairFunc = Client.configureApp.bind(null, $scope.app.id, 'data_dir', { dataDir: null }); + break; + + // this also happens for import faliures. this UI can only show backup listing. use CLI for arbit id/config + case ISTATES.PENDING_RESTORE: + repairFunc = Client.restoreApp.bind(null, $scope.app.id, $scope.repair.backupId); + break; + + case ISTATES.PENDING_UNINSTALL: + repairFunc = Client.uninstallApp.bind(null, $scope.app.id); + break; + + case ISTATES.PENDING_START: + case ISTATES.PENDING_STOP: + case ISTATES.PENDING_RESIZE: + case ISTATES.PENDING_DEBUG: + case ISTATES.PENDING_RECREATE_CONTAINER: + case ISTATES.PENDING_CONFIGURE: + case ISTATES.PENDING_BACKUP: // only here for completeness, should never happen as this only set task error and not app erro + case ISTATES.PENDING_UPDATE: // when update failed, just bring it back to current state and user can click update again + default: + repairFunc = Client.repairApp.bind(null, $scope.app.id, {}); + break; } - if ($scope.app.error && $scope.app.error.backupId) { - data.backupId = $scope.repair.backupId; - } - - Client.repairApp($scope.app.id, data, function (error) { + repairFunc(function (error) { if (error) return Client.error(error); $scope.repair.busy = false;