fix(mail(js)): fix message(s) deletion when overquota

This commit is contained in:
Francis Lachapelle
2020-06-16 12:57:17 -04:00
parent 200c353645
commit 35ebb7aaeb
4 changed files with 46 additions and 17 deletions
@@ -786,13 +786,14 @@
var currentUids = uids.slice(start, end), var currentUids = uids.slice(start, end),
currentMessages = messages.slice(start, end), currentMessages = messages.slice(start, end),
data = { uids: currentUids }; data = { uids: currentUids };
if (options) angular.extend(data, options);
return Mailbox.$$resource.post(_this.id, 'batchDelete', data).then(function(data) { return Mailbox.$$resource.post(_this.id, 'batchDelete', data).then(function(data) {
if (end < uids.length) { if (end < uids.length) {
_this.$_deleteMessages(currentUids, currentMessages); _this.$_deleteMessages(currentUids, currentMessages);
return _deleteMessages(end, Math.min(end + batchSize, uids.length)); return _deleteMessages(end, Math.min(end + batchSize, uids.length));
} }
else { else {
// Update inbox quota // Last API call; update inbox quota
if (data.quotas) if (data.quotas)
_this.$account.updateQuota(data.quotas); _this.$account.updateQuota(data.quotas);
return _this.$_deleteMessages(currentUids, currentMessages); return _this.$_deleteMessages(currentUids, currentMessages);
@@ -124,6 +124,8 @@
} }
function _compactBeforeUnload(event) { function _compactBeforeUnload(event) {
if (Mailbox.$virtualMode)
return true;
return vm.selectedFolder.$compact(); return vm.selectedFolder.$compact();
} }
@@ -401,8 +403,8 @@
if (vm.messageDialog === null && _.size(selectedMessages) > 0) if (vm.messageDialog === null && _.size(selectedMessages) > 0)
vm.messageDialog = Dialog.confirm(l('Confirmation'), vm.messageDialog = Dialog.confirm(l('Confirmation'),
l('Are you sure you want to delete the selected messages?'), l('Are you sure you want to delete the selected messages?'),
{ ok: l('Delete') }) { ok: l('Delete') })
.then(function() { .then(function() {
var deleteSelectedMessage = vm.selectedFolder.hasSelectedMessage(); var deleteSelectedMessage = vm.selectedFolder.hasSelectedMessage();
vm.selectedFolder.$deleteMessages(selectedMessages).then(function(index) { 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?'), l('The messages could not be moved to the trash folder. Would you like to delete them immediately?'),
{ ok: l('Delete') }) { ok: l('Delete') })
.then(function() { .then(function() {
vm.selectedFolder.$deleteMessages(selectedMessages, { withoutTrash: true }).then(function(index) { vm.selectedFolder.$deleteMessages(selectedMessages, { withoutTrash: true })
if (Mailbox.$virtualMode) { .then(function(index) {
// When performing an advanced search, we refresh the view if the selected message if (Mailbox.$virtualMode) {
// was deleted, but only once all promises have completed. // When performing an advanced search, we refresh the view if the selected message
if (deleteSelectedMessage) // was deleted, but only once all promises have completed.
$state.go('mail.account.virtualMailbox'); if (deleteSelectedMessage)
} $state.go('mail.account.virtualMailbox');
else { }
// In normal mode, we immediately unselect the selected message. else {
_unselectMessage(deleteSelectedMessage, index); // In normal mode, we immediately unselect the selected message.
} _unselectMessage(deleteSelectedMessage, index);
}); }
})
.finally(function() {
vm.messageDialog = null;
});
}); });
}); });
}) })
@@ -53,7 +53,11 @@
key: hotkey, key: hotkey,
description: l('Delete selected message or folder'), description: l('Delete selected message or folder'),
callback: function() { 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); Mailbox.selectedFolderController.confirmDelete(Mailbox.selectedFolder);
} }
})); }));
@@ -331,7 +331,7 @@
mailbox = Mailbox.selectedFolder; // the VirtualMailbox instance mailbox = Mailbox.selectedFolder; // the VirtualMailbox instance
} }
mailbox.$deleteMessages([message]).then(function(index) { function _success(index) {
var nextIndex = index; var nextIndex = index;
// Remove message object from scope // Remove message object from scope
message = null; message = null;
@@ -378,6 +378,24 @@
catch (error) {} catch (error) {}
} }
vm.closePopup(); 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);
})
);
}); });
}; };