From 35ebb7aaeb2cab73cdb061ef8ade1ca4b4bc7f06 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 16 Jun 2020 12:57:17 -0400 Subject: [PATCH] fix(mail(js)): fix message(s) deletion when overquota --- .../js/Mailer/Mailbox.service.js | 3 +- .../js/Mailer/MailboxController.js | 34 +++++++++++-------- .../js/Mailer/MailboxesController.js | 6 +++- .../js/Mailer/MessageController.js | 20 ++++++++++- 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/UI/WebServerResources/js/Mailer/Mailbox.service.js b/UI/WebServerResources/js/Mailer/Mailbox.service.js index 18f0101fc..1af0ea0eb 100644 --- a/UI/WebServerResources/js/Mailer/Mailbox.service.js +++ b/UI/WebServerResources/js/Mailer/Mailbox.service.js @@ -786,13 +786,14 @@ var currentUids = uids.slice(start, end), currentMessages = messages.slice(start, end), data = { uids: currentUids }; + if (options) angular.extend(data, options); return Mailbox.$$resource.post(_this.id, 'batchDelete', data).then(function(data) { if (end < uids.length) { _this.$_deleteMessages(currentUids, currentMessages); return _deleteMessages(end, Math.min(end + batchSize, uids.length)); } else { - // Update inbox quota + // Last API call; update inbox quota if (data.quotas) _this.$account.updateQuota(data.quotas); return _this.$_deleteMessages(currentUids, currentMessages); diff --git a/UI/WebServerResources/js/Mailer/MailboxController.js b/UI/WebServerResources/js/Mailer/MailboxController.js index e341dfee2..d9ca2e145 100644 --- a/UI/WebServerResources/js/Mailer/MailboxController.js +++ b/UI/WebServerResources/js/Mailer/MailboxController.js @@ -124,6 +124,8 @@ } function _compactBeforeUnload(event) { + if (Mailbox.$virtualMode) + return true; return vm.selectedFolder.$compact(); } @@ -401,8 +403,8 @@ if (vm.messageDialog === null && _.size(selectedMessages) > 0) vm.messageDialog = Dialog.confirm(l('Confirmation'), - l('Are you sure you want to delete the selected messages?'), - { ok: l('Delete') }) + l('Are you sure you want to delete the selected messages?'), + { ok: l('Delete') }) .then(function() { var deleteSelectedMessage = vm.selectedFolder.hasSelectedMessage(); vm.selectedFolder.$deleteMessages(selectedMessages).then(function(index) { @@ -421,18 +423,22 @@ l('The messages could not be moved to the trash folder. Would you like to delete them immediately?'), { ok: l('Delete') }) .then(function() { - vm.selectedFolder.$deleteMessages(selectedMessages, { withoutTrash: true }).then(function(index) { - if (Mailbox.$virtualMode) { - // When performing an advanced search, we refresh the view if the selected message - // was deleted, but only once all promises have completed. - if (deleteSelectedMessage) - $state.go('mail.account.virtualMailbox'); - } - else { - // In normal mode, we immediately unselect the selected message. - _unselectMessage(deleteSelectedMessage, index); - } - }); + vm.selectedFolder.$deleteMessages(selectedMessages, { withoutTrash: true }) + .then(function(index) { + if (Mailbox.$virtualMode) { + // When performing an advanced search, we refresh the view if the selected message + // was deleted, but only once all promises have completed. + if (deleteSelectedMessage) + $state.go('mail.account.virtualMailbox'); + } + else { + // In normal mode, we immediately unselect the selected message. + _unselectMessage(deleteSelectedMessage, index); + } + }) + .finally(function() { + vm.messageDialog = null; + }); }); }); }) diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js index f9f9ddb1a..bc1c6d76f 100644 --- a/UI/WebServerResources/js/Mailer/MailboxesController.js +++ b/UI/WebServerResources/js/Mailer/MailboxesController.js @@ -53,7 +53,11 @@ key: hotkey, description: l('Delete selected message or folder'), callback: function() { - if (Mailbox.selectedFolderController && Mailbox.selectedFolder && Mailbox.selectedFolder.$isEditable && !Mailbox.selectedFolder.hasSelectedMessage()) + if (Mailbox.selectedFolderController && + Mailbox.selectedFolder && + Mailbox.selectedFolder.$isEditable && + !Mailbox.selectedFolder.hasSelectedMessage() && + Mailbox.selectedFolder.$selectedCount() === 0) Mailbox.selectedFolderController.confirmDelete(Mailbox.selectedFolder); } })); diff --git a/UI/WebServerResources/js/Mailer/MessageController.js b/UI/WebServerResources/js/Mailer/MessageController.js index ed3eced18..543dffaf1 100644 --- a/UI/WebServerResources/js/Mailer/MessageController.js +++ b/UI/WebServerResources/js/Mailer/MessageController.js @@ -331,7 +331,7 @@ mailbox = Mailbox.selectedFolder; // the VirtualMailbox instance } - mailbox.$deleteMessages([message]).then(function(index) { + function _success(index) { var nextIndex = index; // Remove message object from scope message = null; @@ -378,6 +378,24 @@ catch (error) {} } vm.closePopup(); + } + + mailbox.$deleteMessages([message]).then(_success, function(response) { + _messageDialog( + Dialog.confirm(l('Warning'), + l('The message could not be moved to the trash folder. Would you like to delete it immediately?'), + { ok: l('Delete') }) + .then(function() { + mailbox.$deleteMessages([message], { withoutTrash: true }) + .then(_success) + .finally(function() { + _messageDialog(null); + }); + }) + .finally(function() { + _messageDialog(null); + }) + ); }); };