diff --git a/webadmin/src/views/apps.html b/webadmin/src/views/apps.html index 507847819..86f3e3c17 100644 --- a/webadmin/src/views/apps.html +++ b/webadmin/src/views/apps.html @@ -171,6 +171,7 @@ diff --git a/webadmin/src/views/apps.js b/webadmin/src/views/apps.js index 617754a24..56ce4c562 100644 --- a/webadmin/src/views/apps.js +++ b/webadmin/src/views/apps.js @@ -9,6 +9,7 @@ angular.module('Application').controller('AppsController', ['$scope', '$location $scope.user = Client.getUserInfo(); $scope.groups = []; $scope.users = []; + $scope.restartAppBusy = false; $scope.appConfigure = { busy: false, @@ -489,6 +490,41 @@ angular.module('Application').controller('AppsController', ['$scope', '$location return app.manifest && app.manifest.configurePath; }; + $scope.restartApp = function (app) { + $scope.restartAppBusy = true; + + function waitUntilStopped(callback) { + Client.refreshInstalledApps(function (error) { + if (error) return callback(error); + + Client.getApp(app.id, function (error, result) { + if (error) return callback(error); + + if (result.runState === 'stopped') return callback(); + setTimeout(waitUntilStopped.bind(null, callback), 2000); + }); + }); + } + + Client.stopApp(app.id, function (error) { + $scope.restartAppBusy = false; + + if (error) return console.error('Failed to stop app.', error); + + // close dialog to allow user see the app restarting + $('#appConfigureModal').modal('hide'); + $scope.reset(); + + waitUntilStopped(function (error) { + if (error) return console.error('Failed to get app status.', error); + + Client.startApp(app.id, function (error) { + if (error) console.error('Failed to start app.', error); + }); + }); + }); + }; + function fetchUsers() { Client.getUsers(function (error, users) { if (error) {