mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-23 12:25:23 +00:00
(js) Improve message selection when deleting msgs
This commit is contained in:
@@ -212,7 +212,7 @@
|
||||
<span ng-switch-default="true">{{mailbox.service.selectedFolder.getLength()}} <var:string label:value="messages"/></span>
|
||||
</span>
|
||||
</md-subheader>
|
||||
<md-virtual-repeat-container class="md-flex">
|
||||
<md-virtual-repeat-container class="md-flex" md-top-index="mailbox.selectedFolder.$topIndex">
|
||||
<md-list class="sg-section-list">
|
||||
<md-list-item
|
||||
class="md-default-theme md-background md-hue-1"
|
||||
|
||||
@@ -528,7 +528,7 @@
|
||||
uids = _.pluck(messages, 'uid');
|
||||
return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids})
|
||||
.then(function(data) {
|
||||
var selectedMessages, selectedUIDs, unseen;
|
||||
var selectedMessages, selectedUIDs, unseen, firstIndex = _this.$messages.length;
|
||||
// Decrement the unseenCount accordingly
|
||||
unseen = _.filter(messages, function(message, i) { return !message.isread; });
|
||||
_this.unseenCount -= unseen.length;
|
||||
@@ -543,6 +543,8 @@
|
||||
if (message.uid == _this.selectedMessage)
|
||||
delete _this.selectedMessage;
|
||||
_this.$messages.splice(index, 1);
|
||||
if (index < firstIndex)
|
||||
firstIndex = index;
|
||||
}
|
||||
else {
|
||||
_this.uidsMap[message.uid] -= uids.length;
|
||||
@@ -551,6 +553,8 @@
|
||||
// Update inbox quota
|
||||
if (data.quotas)
|
||||
_this.$account.updateQuota(data.quotas);
|
||||
|
||||
return firstIndex;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
MailboxController.$inject = ['$window', '$state', '$timeout', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'encodeUriFilter', 'Dialog', 'Account', 'Mailbox'];
|
||||
function MailboxController($window, $state, $timeout, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, Dialog, Account, Mailbox) {
|
||||
MailboxController.$inject = ['$window', '$state', '$mdDialog', 'stateAccounts', 'stateAccount', 'stateMailbox', 'encodeUriFilter', 'Dialog', 'Account', 'Mailbox'];
|
||||
function MailboxController($window, $state, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, Dialog, Account, Mailbox) {
|
||||
var vm = this, messageDialog = null;
|
||||
|
||||
// Expose controller
|
||||
@@ -59,24 +59,43 @@
|
||||
// User confirmed the deletion
|
||||
var unselectMessage = false;
|
||||
var selectedMessages = _.filter(vm.selectedFolder.$messages, function(message) {
|
||||
if (message.uid == vm.selectedFolder.selectedMessage)
|
||||
if (message.selected &&
|
||||
message.uid == vm.selectedFolder.selectedMessage)
|
||||
unselectMessage = true;
|
||||
return message.selected;
|
||||
});
|
||||
vm.selectedFolder.$deleteMessages(selectedMessages).then(function() {
|
||||
vm.selectedFolder.$deleteMessages(selectedMessages).then(function(index) {
|
||||
var nextMessage, previousMessage, nextIndex = index;
|
||||
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)
|
||||
});
|
||||
if (Mailbox.$virtualMode) {
|
||||
$state.go('mail.account.virtualMailbox');
|
||||
}
|
||||
else {
|
||||
// Select either the next or previous message
|
||||
if (index > 0) {
|
||||
nextIndex -= 1;
|
||||
nextMessage = vm.selectedFolder.$messages[nextIndex];
|
||||
}
|
||||
if (index < vm.selectedFolder.$messages.length)
|
||||
previousMessage = vm.selectedFolder.$messages[index];
|
||||
if (nextMessage) {
|
||||
if (nextMessage.isread && previousMessage && !previousMessage.isread) {
|
||||
nextIndex = index;
|
||||
nextMessage = previousMessage;
|
||||
}
|
||||
}
|
||||
else if (previousMessage) {
|
||||
nextIndex = index;
|
||||
nextMessage = previousMessage;
|
||||
}
|
||||
if (nextMessage) {
|
||||
$state.go('mail.account.mailbox.message', { messageId: nextMessage.uid });
|
||||
vm.selectedFolder.$topIndex = nextIndex;
|
||||
}
|
||||
else {
|
||||
$state.go('mail.account.mailbox');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -174,6 +193,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
angular
|
||||
.module('material.components.virtualRepeat')
|
||||
.decorator('mdVirtualRepeatContainerDirective', mdVirtualRepeatContainerDirectiveDecorator);
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
mdVirtualRepeatContainerDirectiveDecorator.$inject = ['$delegate'];
|
||||
function mdVirtualRepeatContainerDirectiveDecorator($delegate) {
|
||||
$delegate[0].controller.prototype.resetScroll = function() {
|
||||
// Don't scroll to top if current virtual repeater is the messages list
|
||||
// but do update the container size
|
||||
if (this.$element.parent().attr('id') == 'messagesList')
|
||||
this.updateSize();
|
||||
else
|
||||
this.scrollTo(0);
|
||||
};
|
||||
return $delegate;
|
||||
}
|
||||
|
||||
angular
|
||||
.module('SOGo.MailerUI')
|
||||
.controller('MailboxController', MailboxController);
|
||||
|
||||
@@ -177,9 +177,6 @@
|
||||
var mailboxId = decodeUriFilter($stateParams.mailboxId),
|
||||
_find;
|
||||
|
||||
if (Mailbox.selectedFolder)
|
||||
Mailbox.selectedFolder.$isLoading = true;
|
||||
|
||||
// Recursive find function
|
||||
_find = function(mailboxes) {
|
||||
var mailbox = _.find(mailboxes, function(o) {
|
||||
@@ -195,6 +192,9 @@
|
||||
return mailbox;
|
||||
};
|
||||
|
||||
if (Mailbox.selectedFolder)
|
||||
Mailbox.selectedFolder.$isLoading = true;
|
||||
|
||||
return _find(stateAccount.$mailboxes);
|
||||
}
|
||||
|
||||
@@ -255,11 +255,11 @@
|
||||
var message;
|
||||
|
||||
message = _.find(stateMailbox.$messages, function(messageObject) {
|
||||
return messageObject.uid == $stateParams.messageId;
|
||||
return messageObject.uid == parseInt($stateParams.messageId);
|
||||
});
|
||||
|
||||
if (message) {
|
||||
stateMailbox.selectedMessage = $stateParams.messageId;
|
||||
stateMailbox.selectedMessage = parseInt($stateParams.messageId);
|
||||
return message.$reload();
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -92,7 +92,8 @@
|
||||
}
|
||||
|
||||
function doDelete() {
|
||||
var parentCtrls = $parentControllers(), mailbox, message, state;
|
||||
var mailbox, message, state, nextMessage, previousMessage,
|
||||
parentCtrls = $parentControllers();
|
||||
|
||||
if (parentCtrls.messageCtrl) {
|
||||
mailbox = parentCtrls.mailboxCtrl.selectedFolder;
|
||||
@@ -105,19 +106,38 @@
|
||||
state = $state;
|
||||
}
|
||||
|
||||
mailbox.$deleteMessages([message]).then(function() {
|
||||
// Remove message from list of messages
|
||||
var index = _.findIndex(mailbox.$messages, function(o) {
|
||||
return o.uid == message.uid;
|
||||
});
|
||||
if (index != -1)
|
||||
mailbox.$messages.splice(index, 1);
|
||||
mailbox.$deleteMessages([message]).then(function(index) {
|
||||
var nextIndex = index;
|
||||
// Remove message object from scope
|
||||
message = null;
|
||||
// Navigate to mailbox if not in popup window
|
||||
if (angular.isDefined(state)) {
|
||||
// Select either the next or previous message
|
||||
if (index > 0) {
|
||||
nextIndex -= 1;
|
||||
nextMessage = mailbox.$messages[nextIndex];
|
||||
}
|
||||
if (index < mailbox.$messages.length)
|
||||
previousMessage = mailbox.$messages[index];
|
||||
|
||||
if (nextMessage) {
|
||||
if (nextMessage.isread && previousMessage && !previousMessage.isread) {
|
||||
nextIndex = index;
|
||||
nextMessage = previousMessage;
|
||||
}
|
||||
}
|
||||
else if (previousMessage) {
|
||||
nextIndex = index;
|
||||
nextMessage = previousMessage;
|
||||
}
|
||||
|
||||
try {
|
||||
state.go('mail.account.mailbox', { mailboxId: encodeUriFilter(mailbox.path) });
|
||||
if (nextMessage) {
|
||||
state.go('mail.account.mailbox.message', { messageId: nextMessage.uid });
|
||||
mailbox.$topIndex = nextIndex;
|
||||
}
|
||||
else {
|
||||
state.go('mail.account.mailbox');
|
||||
}
|
||||
}
|
||||
catch (error) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user