diff --git a/NEWS b/NEWS
index 0510ae3506..8a90538c95 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,7 @@ Bug fixes
- [web] fixed mail settings persistence when sorting by arrival date
- [web] disable submit button while saving an event or a task (#3880)
- [web] fixed computation of week number
+ - [web] fixed and improved IMAP folder subscriptions manager (#3865)
3.2.1 (2016-11-02)
------------------
diff --git a/UI/Templates/MailerUI/UIxMailFolderSubscriptions.wox b/UI/Templates/MailerUI/UIxMailFolderSubscriptions.wox
index 9384fcafa0..cfec2e70ab 100644
--- a/UI/Templates/MailerUI/UIxMailFolderSubscriptions.wox
+++ b/UI/Templates/MailerUI/UIxMailFolderSubscriptions.wox
@@ -28,9 +28,9 @@
md-mode="indeterminate">
-
+
{{subscriptions.metadataForFolder(folder).icon}}
@@ -38,11 +38,11 @@
{{subscriptions.metadataForFolder(folder).name}}
-
+ ng-false-value="0">
diff --git a/UI/WebServerResources/js/Mailer/Account.service.js b/UI/WebServerResources/js/Mailer/Account.service.js
index d242b1cc96..38a8dd6212 100644
--- a/UI/WebServerResources/js/Mailer/Account.service.js
+++ b/UI/WebServerResources/js/Mailer/Account.service.js
@@ -131,7 +131,7 @@
return Account.$q.when(this.$mailboxes);
}
else {
- return Account.$Mailbox.$find(this).then(function(data) {
+ return Account.$Mailbox.$find(this, options).then(function(data) {
_this.$mailboxes = data;
_this.$expanded = false;
diff --git a/UI/WebServerResources/js/Mailer/Mailbox.service.js b/UI/WebServerResources/js/Mailer/Mailbox.service.js
index 591075acf8..60db13e667 100644
--- a/UI/WebServerResources/js/Mailer/Mailbox.service.js
+++ b/UI/WebServerResources/js/Mailer/Mailbox.service.js
@@ -81,10 +81,10 @@
* @return a promise of the HTTP operation
* @see {@link Account.$getMailboxes}
*/
- Mailbox.$find = function(account) {
+ Mailbox.$find = function(account, options) {
var path, futureMailboxData;
- if (account.fetchAll)
+ if (options && options.all)
futureMailboxData = this.$$resource.fetch(account.id.toString(), 'viewAll');
else
futureMailboxData = this.$$resource.fetch(account.id.toString(), 'view');
@@ -909,14 +909,14 @@
};
/**
- * @function $toggleSubscribe
+ * @function $updateSubscribe
* @memberof Mailbox.prototype
- * @desc Subscribe or unsubscribe to a mailbox
+ * @desc Update mailbox subscription state with server.
*/
- Mailbox.prototype.$toggleSubscribe = function() {
- if (this.subscribed)
- return Mailbox.$$resource.post(this.id, 'subscribe');
+ Mailbox.prototype.$updateSubscribe = function() {
+ var action = this.subscribed? 'subscribe' : 'unsubscribe';
+
+ Mailbox.$$resource.post(this.id, action);
+ };
- return Mailbox.$$resource.post(this.id, 'unsubscribe');
- };
})();
diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js
index 8ad7c5b985..bdc1414cc0 100644
--- a/UI/WebServerResources/js/Mailer/MailboxesController.js
+++ b/UI/WebServerResources/js/Mailer/MailboxesController.js
@@ -210,12 +210,10 @@
});
vm.close = close;
-
- vm.account.$getMailboxes().then(function() {
+ vm.account.$getMailboxes({ reload: true, all: true }).then(function() {
vm.loading = false;
});
-
function close() {
$mdDialog.cancel();
}