diff --git a/app/components/container/containerController.js b/app/components/container/containerController.js index 6d49eab16..4d0c2e1a2 100644 --- a/app/components/container/containerController.js +++ b/app/components/container/containerController.js @@ -121,11 +121,21 @@ function ($scope, $state, $stateParams, $filter, Container, ContainerCommit, Ima $scope.remove = function () { $('#loadingViewSpinner').show(); Container.remove({id: $stateParams.id}, function (d) { - $state.go('containers', {}, {reload: true}); - Messages.send("Container removed", $stateParams.id); + if (d.message) { + $('#loadingViewSpinner').hide(); + Messages.send("Error", d.message); + } + else { + $state.go('containers', {}, {reload: true}); + Messages.send("Container removed", $stateParams.id); + } }, function (e) { + if (e.data.message) { + Messages.error("Failure", e.data.message); + } else { + Messages.error("Failure", 'Unable to remove container'); + } update(); - Messages.error("Failure", "Container failed to remove." + e.data); }); }; diff --git a/app/components/containers/containersController.js b/app/components/containers/containersController.js index 47fd473c2..e64fec4c7 100644 --- a/app/components/containers/containersController.js +++ b/app/components/containers/containersController.js @@ -71,16 +71,19 @@ function ($scope, Container, ContainerHelper, Info, Settings, Messages, Config, } else if (action === Container.remove) { action({id: c.Id}, function (d) { - var error = errorMsgFilter(d); - if (error) { - Messages.send("Error", "Unable to remove running container"); + if (d.message) { + Messages.send("Error", d.message); } else { Messages.send("Container " + msg, c.Id); } complete(); }, function (e) { - Messages.error("Failure", e.data); + if (e.data.message) { + Messages.error("Failure", e.data.message); + } else { + Messages.error("Failure", 'Unable to remove container'); + } complete(); }); } diff --git a/app/shared/responseHandlers.js b/app/shared/responseHandlers.js index efe4e13da..486205a55 100644 --- a/app/shared/responseHandlers.js +++ b/app/shared/responseHandlers.js @@ -21,6 +21,29 @@ function jsonObjectsToArrayHandler(data) { return angular.fromJson(str); } +// The Docker API often returns an empty string on success (Docker 1.9 -> Docker 1.12). +// On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message +// container the error (Docker = 1.12). +// This handler returns an empty object on success or a newly created JSON object with +// the field message containing the error message on failure. +// Used by the API in: container deletion, network deletion. +function deleteGenericHandler(data) { + var response = {}; + // No data is returned when deletion is successful (Docker 1.9 -> 1.12) + if (!data) { + return response; + } + // A string is returned on failure (Docker < 1.12) + else if (!isJSON(data)) { + response.message = data; + } + // Docker 1.12 returns a valid JSON object when an error occurs + else { + response = angular.fromJson(data); + } + return response; +} + // Image delete API returns an array on success (Docker 1.9 -> Docker 1.12). // On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message // container the error (Docker = 1.12). @@ -43,26 +66,3 @@ function deleteImageHandler(data) { } return response; } - -// Network delete API returns an empty string on success (Docker 1.9 -> Docker 1.12). -// On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message -// container the error (Docker = 1.12). -// This handler returns an empty object on success or a newly created JSON object with -// the field message containing the error message on failure. -function deleteNetworkHandler(data) { - var response = {}; - // No data is returned when deletion is successful (Docker 1.9 -> 1.12) - if (!data) { - return response; - } - // A string is returned when an error occurs (Docker < 1.12) - else if (data && !isJSON(data)) { - response.message = data; - return response; - } - // Docker 1.12 returns a valid JSON object when an error occurs - else { - response = angular.fromJson(data); - } - return response; -} diff --git a/app/shared/services.js b/app/shared/services.js index bb992a5d6..39e8c0edb 100644 --- a/app/shared/services.js +++ b/app/shared/services.js @@ -16,7 +16,10 @@ angular.module('uifordocker.services', ['ngResource', 'ngSanitize']) unpause: {method: 'POST', params: {id: '@id', action: 'unpause'}}, changes: {method: 'GET', params: {action: 'changes'}, isArray: true}, create: {method: 'POST', params: {action: 'create'}}, - remove: {method: 'DELETE', params: {id: '@id', v: 0}}, + remove: { + method: 'DELETE', params: {id: '@id', v: 0}, + transformResponse: deleteGenericHandler + }, rename: {method: 'POST', params: {id: '@id', action: 'rename', name: '@name'}}, stats: {method: 'GET', params: {id: '@id', stream: false, action: 'stats'}, timeout: 5000}, exec: {method: 'POST', params: {id: '@id', action: 'exec'}} @@ -135,7 +138,7 @@ angular.module('uifordocker.services', ['ngResource', 'ngSanitize']) query: {method: 'GET', isArray: true}, get: {method: 'GET'}, create: {method: 'POST', params: {action: 'create'}}, - remove: { method: 'DELETE', transformResponse: deleteNetworkHandler }, + remove: { method: 'DELETE', transformResponse: deleteGenericHandler }, connect: {method: 'POST', params: {action: 'connect'}}, disconnect: {method: 'POST', params: {action: 'disconnect'}} });