(js) Fix batch delete of messages
Internal arrays/objects were not properly updated.pull/186/head
parent
ccd031693e
commit
6672e03c22
|
@ -193,7 +193,6 @@
|
|||
if (this.$loadMessage(message.uid))
|
||||
return message;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
|
@ -254,7 +253,9 @@
|
|||
if (!angular.isDefined(this.unseenCount))
|
||||
this.unseenCount = 0;
|
||||
|
||||
this.$isLoading = true;
|
||||
Mailbox.$timeout(function() {
|
||||
_this.$isLoading = true;
|
||||
});
|
||||
|
||||
return Mailbox.$Preferences.ready().then(function() {
|
||||
|
||||
|
@ -508,8 +509,33 @@
|
|||
* @desc Delete multiple messages from mailbox.
|
||||
* @return a promise of the HTTP operation
|
||||
*/
|
||||
Mailbox.prototype.$deleteMessages = function(uids) {
|
||||
return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});
|
||||
Mailbox.prototype.$deleteMessages = function(messages) {
|
||||
var _this = this, uids;
|
||||
|
||||
uids = _.pluck(messages, 'uid');
|
||||
return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids})
|
||||
.then(function() {
|
||||
var selectedMessages, selectedUIDs, unseen;
|
||||
// Decrement the unseenCount accordingly
|
||||
unseen = _.filter(messages, function(message, i) { return !message.isread; });
|
||||
_this.unseenCount -= unseen.length;
|
||||
// Remove messages from $messages and uidsMap
|
||||
_.forEachRight(_this.$messages, function(message, index) {
|
||||
var selectedIndex = _.findIndex(uids, function(uid) {
|
||||
return message.uid == uid;
|
||||
});
|
||||
if (selectedIndex > -1) {
|
||||
uids.splice(selectedIndex, 1);
|
||||
delete _this.uidsMap[message.uid];
|
||||
if (message.uid == _this.selectedMessage)
|
||||
delete _this.selectedMessage;
|
||||
_this.$messages.splice(index, 1);
|
||||
}
|
||||
else {
|
||||
_this.uidsMap[message.uid] -= uids.length;
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -54,15 +54,27 @@
|
|||
l('Are you sure you want to delete the selected messages?'))
|
||||
.then(function() {
|
||||
// User confirmed the deletion
|
||||
var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });
|
||||
var selectedUIDs = _.pluck(selectedMessages, 'uid');
|
||||
vm.selectedFolder.$deleteMessages(selectedUIDs).then(function() {
|
||||
// Decrement the unseenCount accordingly
|
||||
var unseenCount = _.filter(selectedMessages, function(message) { return !message.isread; });
|
||||
vm.selectedFolder.$messages = _.difference(vm.selectedFolder.$messages, selectedMessages);
|
||||
vm.selectedFolder.unseenCount =- unseenCount;
|
||||
}, function(error) {
|
||||
Dialog.alert(l('Error'), error);
|
||||
var unselectMessage = false;
|
||||
var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) {
|
||||
if (message.uid == vm.selectedFolder.selectedMessage)
|
||||
unselectMessage = true;
|
||||
return message.selected;
|
||||
});
|
||||
vm.selectedFolder.$deleteMessages(selectedMessages).then(function() {
|
||||
if (unselectMessage) {
|
||||
if (Mailbox.$virtualMode)
|
||||
$state.go('mail.account.virtualMailbox',
|
||||
{
|
||||
accountId: stateAccount.id,
|
||||
mailboxId: encodeUriFilter(vm.selectedFolder.path)
|
||||
});
|
||||
else
|
||||
$state.go('mail.account.mailbox',
|
||||
{
|
||||
accountId: stateAccount.id,
|
||||
mailboxId: encodeUriFilter(vm.selectedFolder.path)
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -70,11 +82,7 @@
|
|||
function copySelectedMessages(folder) {
|
||||
var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) { return message.selected; });
|
||||
var selectedUIDs = _.pluck(selectedMessages, 'uid');
|
||||
vm.selectedFolder.$copyMessages(selectedUIDs, '/' + folder).then(function() {
|
||||
// TODO: refresh target mailbox?
|
||||
}, function(error) {
|
||||
Dialog.alert(l('Error'), error);
|
||||
});
|
||||
vm.selectedFolder.$copyMessages(selectedUIDs, '/' + folder);
|
||||
}
|
||||
|
||||
// function moveSelectedMessages(folder) {
|
||||
|
|
|
@ -172,8 +172,8 @@
|
|||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateMailbox.$inject = ['Mailbox', '$stateParams', 'stateAccount', 'decodeUriFilter'];
|
||||
function stateMailbox(Mailbox, $stateParams, stateAccount, decodeUriFilter) {
|
||||
stateMailbox.$inject = ['$stateParams', 'stateAccount', 'decodeUriFilter'];
|
||||
function stateMailbox($stateParams, stateAccount, decodeUriFilter) {
|
||||
var mailboxId = decodeUriFilter($stateParams.mailboxId),
|
||||
_find;
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
}
|
||||
|
||||
function doDelete() {
|
||||
stateMailbox.$deleteMessages([stateMessage.uid]).then(function() {
|
||||
stateMailbox.$deleteMessages([stateMessage]).then(function() {
|
||||
// Remove message from list of messages
|
||||
var index = _.findIndex(stateMailbox.$messages, function(o) {
|
||||
return o.uid == stateMessage.uid;
|
||||
|
|
Loading…
Reference in New Issue