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();
});
});