diff --git a/src/views/emails.html b/src/views/emails.html index 5f0685764..c36af6201 100644 --- a/src/views/emails.html +++ b/src/views/emails.html @@ -234,6 +234,16 @@ {{ spamConfig.acl.blacklist.length }} address(es) blacklisted {{ spamConfig.customConfig ? '. Custom rules set.' : '.' }} + +
+
+ Changing Email domain: +
+
+
+

{{ mailLocation.message }}

+
+

diff --git a/src/views/emails.js b/src/views/emails.js index ab0e6b207..019e4f54b 100644 --- a/src/views/emails.js +++ b/src/views/emails.js @@ -1,7 +1,6 @@ 'use strict'; -/* global angular:false */ -/* global $:false */ +/* global $, angular, TASK_TYPES */ angular.module('Application').controller('EmailsController', ['$scope', '$location', '$timeout', 'Client', function ($scope, $location, $timeout, Client) { Client.onReady(function () { if (!Client.getUserInfo().isAtLeastAdmin) $location.path('/'); }); @@ -78,6 +77,7 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati currentLocation: { domain: null, subdomain: '' }, domain: null, subdomain: '', + taskId: null, refresh: function () { Client.getMailLocation(function (error, location) { @@ -85,6 +85,14 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati $scope.mailLocation.currentLocation.subdomain = location.subdomain; $scope.mailLocation.currentLocation.domain = $scope.domains.find(function (d) { return location.domain === d.domain; }); + + Client.getLatestTaskByType(TASK_TYPES.TASK_CHANGE_MAIL_LOCATION, function (error, task) { + if (error) return console.error(error); + if (!task) return; + + $scope.mailLocation.taskId = task.id; + $scope.mailLocation.updateStatus(); + }); }); }, @@ -102,21 +110,44 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati $('#mailLocationModal').modal('show'); }, + updateStatus: function () { + Client.getTask($scope.mailLocation.taskId, function (error, data) { + if (error) return window.setTimeout($scope.mailLocation.updateStatus, 5000); + + if (!data.active) { + $scope.mailLocation.taskId = null; + $scope.mailLocation.busy = false; + $scope.mailLocation.message = ''; + $scope.mailLocation.percent = 100; // indicates that 'result' is valid + $scope.mailLocation.errorMessage = data.success ? '' : data.error.message; + return; + } + + $scope.mailLocation.busy = true; + $scope.mailLocation.percent = data.percent; + $scope.mailLocation.message = data.message; + + window.setTimeout($scope.mailLocation.updateStatus, 1000); + }); + }, + submit: function () { $scope.mailLocation.busy = true; - Client.setMailLocation($scope.mailLocation.subdomain, $scope.mailLocation.domain.domain, function (error) { + Client.setMailLocation($scope.mailLocation.subdomain, $scope.mailLocation.domain.domain, function (error, result) { if (error) { $scope.mailLocation.busy = false; $scope.mailLocation.error = error; return; } - $timeout(function () { - $scope.mailLocation.currentLocation = { subdomain: $scope.mailLocation.subdomain, domain: $scope.mailLocation.domain }; - $scope.mailLocation.busy = false; - $('#mailLocationModal').modal('hide'); - }, 3000); + // update UI immediately + $scope.mailLocation.currentLocation = { subdomain: $scope.mailLocation.subdomain, domain: $scope.mailLocation.domain }; + + $scope.mailLocation.taskId = result.taskId; + $scope.mailLocation.updateStatus(); + + $('#mailLocationModal').modal('hide'); }); } }; @@ -323,6 +354,7 @@ angular.module('Application').controller('EmailsController', ['$scope', '$locati if ($scope.user.role === 'owner') $scope.activity.refresh(); $scope.mailLocation.refresh(); + refreshDomainStatuses(); }); });