parent
70d0408230
commit
a69a5b77be
|
@ -7,7 +7,7 @@
|
|||
|
||||
<!-- in virtual mailbox mode -->
|
||||
<md-toolbar class="md-whiteframe-z1 md-hue-3"
|
||||
ng-hide="!mailbox.service.$virtualPath || mailbox.mode.multiple">
|
||||
ng-hide="mailbox.service.$virtualPath === false || mailbox.mode.multiple">
|
||||
<div class="md-toolbar-tools"
|
||||
layout="row" layout-align="start start">
|
||||
<div class="pseudo-input-container pseudo-input-container--compact md-flex sg-no-wrap">
|
||||
|
@ -15,7 +15,7 @@
|
|||
<var:string label:value="Search messages in"/>
|
||||
</label>
|
||||
<md-select class="pseudo-input-field" ng-model="mailbox.service.$virtualPath">
|
||||
<md-option ng-value="">
|
||||
<md-option ng-value="''">
|
||||
<span ng-bind="app.accounts[0].name"><!-- main account name --></span>
|
||||
</md-option>
|
||||
<md-option ng-repeat="folder in
|
||||
|
@ -67,7 +67,7 @@
|
|||
</md-toolbar>
|
||||
<!-- single-selection toolbars -->
|
||||
<md-toolbar class="md-accent md-hue-1"
|
||||
ng-hide="mailbox.service.$virtualPath || mailbox.mode.multiple">
|
||||
ng-hide="mailbox.service.$virtualPath !== false || mailbox.mode.multiple">
|
||||
<!-- sort mode (default) -->
|
||||
<div class="md-toolbar-tools" ng-hide="mailbox.mode.search">
|
||||
<md-button class="sg-icon-button" label:aria-label="Search"
|
||||
|
|
|
@ -69,6 +69,13 @@
|
|||
<var:string label:value="New Folder..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-menu-item ng-show="::account.id == 0">
|
||||
<md-button
|
||||
label:aria-label="Search"
|
||||
ng-click="app.showAdvancedSearch()">
|
||||
<var:string label:value="Search"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</md-menu-content>
|
||||
</md-menu>
|
||||
</md-list-item>
|
||||
|
@ -116,13 +123,13 @@
|
|||
|
||||
<script type="text/ng-template" id="UIxMailFolderTemplate">
|
||||
<md-toolbar layout="row" layout-align="space-between center" class="toolbar-main"
|
||||
ng-hide="mailbox.service.$virtualPath">
|
||||
ng-hide="mailbox.service.$virtualPath !== false">
|
||||
<var:component className="UIxTopnavToolbar"/>
|
||||
</md-toolbar>
|
||||
|
||||
<!-- Advanced search toolbar -->
|
||||
<md-toolbar layout="column" class="md-tall toolbar-main md-hue-3"
|
||||
ng-show="mailbox.service.$virtualPath">
|
||||
ng-show="mailbox.service.$virtualPath !== false">
|
||||
<div class="md-toolbar-tools">
|
||||
<div layout="column" class="md-flex">
|
||||
<div class="pseudo-input-container--compact">
|
||||
|
|
|
@ -240,7 +240,7 @@
|
|||
}
|
||||
|
||||
if (index > -1)
|
||||
vm.selectMessage(vm.selectedFolder.$messages[index]);
|
||||
vm.selectMessage(vm.selectedFolder.getItemAtIndex(index));
|
||||
|
||||
$event.preventDefault();
|
||||
|
||||
|
@ -263,7 +263,7 @@
|
|||
index = 0;
|
||||
|
||||
if (index < vm.selectedFolder.getLength())
|
||||
vm.selectMessage(vm.selectedFolder.$messages[index]);
|
||||
vm.selectMessage(vm.selectedFolder.getItemAtIndex(index));
|
||||
else
|
||||
index = -1;
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
MailboxesController.$inject = ['$scope', '$state', '$transitions', '$timeout', '$window', '$mdDialog', '$mdToast', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'sgHotkeys', 'Account', 'Mailbox', 'VirtualMailbox', 'User', 'Preferences', 'stateAccounts'];
|
||||
function MailboxesController($scope, $state, $transitions, $timeout, $window, $mdDialog, $mdToast, focus, encodeUriFilter, Dialog, Settings, sgHotkeys, Account, Mailbox, VirtualMailbox, User, Preferences, stateAccounts) {
|
||||
MailboxesController.$inject = ['$scope', '$state', '$transitions', '$timeout', '$window', '$mdMedia', '$mdSidenav', '$mdDialog', '$mdToast', 'sgConstant', 'sgFocus', 'encodeUriFilter', 'Dialog', 'sgSettings', 'sgHotkeys', 'Account', 'Mailbox', 'VirtualMailbox', 'User', 'Preferences', 'stateAccounts'];
|
||||
function MailboxesController($scope, $state, $transitions, $timeout, $window, $mdMedia, $mdSidenav, $mdDialog, $mdToast, sgConstant, focus, encodeUriFilter, Dialog, Settings, sgHotkeys, Account, Mailbox, VirtualMailbox, User, Preferences, stateAccounts) {
|
||||
var vm = this,
|
||||
account,
|
||||
mailbox,
|
||||
|
@ -84,7 +84,8 @@
|
|||
var root, mailboxes = [],
|
||||
_visit = function(folders) {
|
||||
_.forEach(folders, function(o) {
|
||||
mailboxes.push(o);
|
||||
if (!o.isNoSelect())
|
||||
mailboxes.push(o);
|
||||
if (o.children && o.children.length > 0) {
|
||||
_visit(o.children);
|
||||
}
|
||||
|
@ -102,14 +103,16 @@
|
|||
Mailbox.selectedFolder = vm.virtualMailbox;
|
||||
Mailbox.$virtualMode = true;
|
||||
|
||||
if (angular.isDefined(Mailbox.$virtualPath)) {
|
||||
if (Mailbox.$virtualPath.length) {
|
||||
root = vm.accounts[0].$getMailboxByPath(Mailbox.$virtualPath);
|
||||
mailboxes.push(root);
|
||||
if (vm.search.subfolders && root.children.length)
|
||||
_visit(root.children);
|
||||
}
|
||||
else {
|
||||
mailboxes = vm.accounts[0].$flattenMailboxes();
|
||||
mailboxes = _.filter(vm.accounts[0].$flattenMailboxes({ all: true }), function(mailbox) {
|
||||
return !mailbox.isNoSelect();
|
||||
});
|
||||
}
|
||||
|
||||
vm.virtualMailbox.setMailboxes(mailboxes);
|
||||
|
@ -187,6 +190,13 @@
|
|||
}
|
||||
};
|
||||
|
||||
this.showAdvancedSearch = function() {
|
||||
Mailbox.$virtualPath = '';
|
||||
// Close sidenav on small devices
|
||||
if (!$mdMedia(sgConstant['gt-md']))
|
||||
$mdSidenav('left').close();
|
||||
};
|
||||
|
||||
this.newFolder = function(parentFolder) {
|
||||
Dialog.prompt(l('New Folder...'),
|
||||
l('Enter the new name of your folder'))
|
||||
|
|
|
@ -215,6 +215,9 @@
|
|||
message = stateMessage;
|
||||
state = $state;
|
||||
}
|
||||
if (Mailbox.$virtualMode) {
|
||||
mailbox = Mailbox.selectedFolder; // the VirtualMailbox instance
|
||||
}
|
||||
|
||||
mailbox.$deleteMessages([message]).then(function(index) {
|
||||
var nextIndex = index;
|
||||
|
@ -224,10 +227,10 @@
|
|||
// Select either the next or previous message
|
||||
if (index > 0) {
|
||||
nextIndex -= 1;
|
||||
nextMessage = mailbox.$messages[nextIndex];
|
||||
nextMessage = mailbox.getItemAtIndex(nextIndex);
|
||||
}
|
||||
if (index < mailbox.$messages.length)
|
||||
previousMessage = mailbox.$messages[index];
|
||||
if (index < mailbox.getLength())
|
||||
previousMessage = mailbox.getItemAtIndex(index);
|
||||
|
||||
if (nextMessage) {
|
||||
if (nextMessage.isread && previousMessage && !previousMessage.isread) {
|
||||
|
@ -242,7 +245,10 @@
|
|||
|
||||
try {
|
||||
if (nextMessage && $mdMedia(sgConstant['gt-md'])) {
|
||||
state.go('mail.account.mailbox.message', { messageId: nextMessage.uid });
|
||||
if (Mailbox.$virtualMode)
|
||||
state.go('mail.account.virtualMailbox.message', {mailboxId: encodeUriFilter(nextMessage.$mailbox.path), messageId: nextMessage.uid});
|
||||
else
|
||||
state.go('mail.account.mailbox.message', {messageId: nextMessage.uid});
|
||||
if (nextIndex < mailbox.$topIndex)
|
||||
mailbox.$topIndex = nextIndex;
|
||||
else if (nextIndex > mailbox.$lastVisibleIndex)
|
||||
|
|
|
@ -185,8 +185,8 @@
|
|||
for (j = 0; j < this.$mailboxes.length; j++) {
|
||||
mailbox = this.$mailboxes[j];
|
||||
for (k = 0; k < mailbox.$messages.length; i++, k++) {
|
||||
message = mailbox.$messages[k];
|
||||
if (i == index) {
|
||||
message = mailbox.$messages[k];
|
||||
if (mailbox.$loadMessage(message.uid))
|
||||
return message;
|
||||
}
|
||||
|
@ -207,6 +207,26 @@
|
|||
return VirtualMailbox.$absolutePath(this.$account.id);
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $selectedMessageIndex
|
||||
* @memberof Mailbox.prototype
|
||||
* @desc Return the index of the currently visible message.
|
||||
* @returns a number or undefined if no message is selected
|
||||
*/
|
||||
VirtualMailbox.prototype.$selectedMessageIndex = function() {
|
||||
var offset = 0;
|
||||
var selectedMailbox = _.find(this.$mailboxes, function(mailbox) {
|
||||
if (angular.isDefined(mailbox.selectedMessage)) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
offset += mailbox.getLength();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return offset + selectedMailbox.uidsMap[selectedMailbox.selectedMessage];
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $selectedMessages
|
||||
* @memberof VirtualMailbox.prototype
|
||||
|
@ -215,9 +235,11 @@
|
|||
*/
|
||||
VirtualMailbox.prototype.$selectedMessages = function() {
|
||||
var messagesMap = {};
|
||||
return _.transform(this.$mailboxes, function(messagesMap, mailbox) {
|
||||
return _.filter(_.transform(this.$mailboxes, function(messagesMap, mailbox) {
|
||||
messagesMap[mailbox.id] = mailbox.$selectedMessages();
|
||||
}, {});
|
||||
}, {}), function(o) {
|
||||
return _.size(o) > 0;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -264,22 +286,43 @@
|
|||
/**
|
||||
* @function $deleteMessages
|
||||
* @memberof VirtualMailbox.prototype
|
||||
* @desc Delete multiple messages from mailbox.
|
||||
* @desc Delete one or multiple messages from mailbox.
|
||||
* @param {object} messagesMap
|
||||
* @return a promise of the HTTP operation
|
||||
*/
|
||||
VirtualMailbox.prototype.$deleteMessages = function(messagesMap) {
|
||||
var promises = [];
|
||||
var _this = this, promises = [];
|
||||
|
||||
_.forEach(messagesMap, function(messages, id) {
|
||||
if (messages.length > 0) {
|
||||
var mailbox = messages[0].$mailbox;
|
||||
var promise = mailbox.$deleteMessages(messages);
|
||||
promises.push(promise);
|
||||
}
|
||||
});
|
||||
if (_.isArray(messagesMap) && messagesMap.length === 1) {
|
||||
// Deleting one message
|
||||
var message = messagesMap[0];
|
||||
var mailbox = message.$mailbox;
|
||||
return mailbox.$deleteMessages([message]).then(function(index) {
|
||||
var offset = 0;
|
||||
_.find(_this.$mailboxes, function(currentMailbox) {
|
||||
if (currentMailbox.id === mailbox.id) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
offset += currentMailbox.getLength();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return offset + index;
|
||||
});
|
||||
}
|
||||
else {
|
||||
// Deleting multiple messages from different mailboxes
|
||||
_.forEach(messagesMap, function(messages, id) {
|
||||
if (messages.length > 0) {
|
||||
var mailbox = messages[0].$mailbox;
|
||||
var promise = mailbox.$deleteMessages(messages);
|
||||
promises.push(promise);
|
||||
}
|
||||
});
|
||||
|
||||
return VirtualMailbox.$q.all(promises);
|
||||
return VirtualMailbox.$q.all(promises);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -347,4 +390,13 @@
|
|||
return VirtualMailbox.$q.all(promises);
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $compact
|
||||
* @memberof VirtualMailbox.prototype
|
||||
* @desc Called when leaving the Mailer module. No-op when in advanced search.
|
||||
*/
|
||||
VirtualMailbox.prototype.$comact = function() {
|
||||
return true;
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue