diff --git a/UI/WebServerResources/js/Mailer/MailboxController.js b/UI/WebServerResources/js/Mailer/MailboxController.js index c2b8d2f77..6d332a8da 100644 --- a/UI/WebServerResources/js/Mailer/MailboxController.js +++ b/UI/WebServerResources/js/Mailer/MailboxController.js @@ -10,8 +10,7 @@ function MailboxController($state, $timeout, $mdDialog, stateAccounts, stateAccount, stateMailbox, encodeUriFilter, focus, Dialog, Account, Mailbox) { var vm = this, messageDialog = null; - if (!Mailbox.$virtualMode) - Mailbox.selectedFolder = stateMailbox; + Mailbox.selectedFolder = stateMailbox; vm.service = Mailbox; vm.accounts = stateAccounts; diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js index 29fdd6b9f..1b6bc8376 100644 --- a/UI/WebServerResources/js/Mailer/MailboxesController.js +++ b/UI/WebServerResources/js/Mailer/MailboxesController.js @@ -68,7 +68,15 @@ } function startAdvancedSearch() { - var root, mailboxes = []; + var root, mailboxes = [], + _visit = function(folders) { + _.each(folders, function(o) { + mailboxes.push(o); + if (o.children && o.children.length > 0) { + _visit(o.children); + } + }); + }; vm.virtualMailbox = new VirtualMailbox(vm.accounts[0]); @@ -84,9 +92,8 @@ if (angular.isDefined(vm.search.mailbox)) { root = vm.accounts[0].$getMailboxByPath(vm.search.mailbox); mailboxes.push(root); - if (vm.search.subfolders && root.children.length) - mailboxes.push(root.children); + _visit(root.children); } else { mailboxes = vm.accounts[0].$flattenMailboxes(); diff --git a/UI/WebServerResources/js/Mailer/Mailer.app.js b/UI/WebServerResources/js/Mailer/Mailer.app.js index f55287905..0cad55d35 100644 --- a/UI/WebServerResources/js/Mailer/Mailer.app.js +++ b/UI/WebServerResources/js/Mailer/Mailer.app.js @@ -49,7 +49,7 @@ } }, resolve: { - stateMailbox: function(Mailbox) { return Mailbox.selectedFolder; } + stateMailbox: stateVirtualMailbox } }) .state('mail.account.virtualMailbox.message', { @@ -62,7 +62,7 @@ } }, resolve: { - stateMailbox: stateVirtualMailbox, + stateMailbox: stateVirtualMailboxOfMessage, stateMessage: stateMessage } }) @@ -175,6 +175,7 @@ function stateMailbox(Mailbox, $stateParams, stateAccount, decodeUriFilter) { var mailboxId = decodeUriFilter($stateParams.mailboxId), _find; + // Recursive find function _find = function(mailboxes) { var mailbox = _.find(mailboxes, function(o) { @@ -192,7 +193,6 @@ if (Mailbox.$virtualMode) return Mailbox.selectedFolder; - //return $q.when(Mailbox.selectedFolder); return _find(stateAccount.$mailboxes); } @@ -216,19 +216,39 @@ // return stateAccount.$newMessage(); // } - stateVirtualMailbox.$inject = ['Mailbox', '$stateParams']; - function stateVirtualMailbox(Mailbox, $stateParams) { + /** + * Return a VirtualMailbox instance + * @ngInject + */ + stateVirtualMailbox.$inject = ['$q', 'Mailbox']; + function stateVirtualMailbox($q, Mailbox) { + if (Mailbox.$virtualMode) + return Mailbox.selectedFolder; + else + return $q.reject("No virtual mailbox defined"); + } - return _.find(Mailbox.selectedFolder.$mailboxes, function(mailboxObject) { - return mailboxObject.path == $stateParams.mailboxId; - }); + /** + * Return a Mailbox instance from a VirtualMailbox instance + * @ngInject + */ + stateVirtualMailboxOfMessage.$inject = ['$q', 'Mailbox', 'decodeUriFilter', '$stateParams']; + function stateVirtualMailboxOfMessage($q, Mailbox, decodeUriFilter, $stateParams) { + var mailboxId = decodeUriFilter($stateParams.mailboxId); + + if (Mailbox.$virtualMode) + return _.find(Mailbox.selectedFolder.$mailboxes, function(mailboxObject) { + return mailboxObject.path == mailboxId; + }); + else + return $q.reject("No virtual mailbox defined for message"); } /** * @ngInject */ - stateMessage.$inject = ['Mailbox', 'encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'stateMessages']; - function stateMessage(Mailbox, encodeUriFilter, $stateParams, $state, stateMailbox, stateMessages) { + stateMessage.$inject = ['Mailbox', 'encodeUriFilter', '$stateParams', '$state', 'stateMailbox']; + function stateMessage(Mailbox, encodeUriFilter, $stateParams, $state, stateMailbox) { var message; message = _.find(stateMailbox.$messages, function(messageObject) { @@ -256,10 +276,14 @@ /** * @ngInject */ - runBlock.$inject = ['$rootScope']; - function runBlock($rootScope) { + runBlock.$inject = ['$rootScope', '$log', '$state']; + function runBlock($rootScope, $log, $state) { + $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) { + $log.error(error); + $state.go('mail'); + }); $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) { - console.error(event, current, previous, rejection); + $log.error(event, current, previous, rejection); }); } diff --git a/UI/WebServerResources/js/Mailer/VirtualMailbox.service.js b/UI/WebServerResources/js/Mailer/VirtualMailbox.service.js index c7f4a3a94..125bb7d88 100644 --- a/UI/WebServerResources/js/Mailer/VirtualMailbox.service.js +++ b/UI/WebServerResources/js/Mailer/VirtualMailbox.service.js @@ -80,7 +80,7 @@ }); }; - VirtualMailbox.prototype.startSearch = function(match, params) { + VirtualMailbox.prototype.startSearch = function(match, params) { var _this = this, search = VirtualMailbox.$q.when(); @@ -89,20 +89,20 @@ _.each(this.$mailboxes, function(mailbox) { search = search.then(function() { if (_this.$isLoading) { - console.log("searching mailbox " + mailbox.path); + VirtualMailbox.$log.debug("searching mailbox " + mailbox.path); return mailbox.$filter( {sort: "date", asc: false, match: match}, params); } }); }); - + search.finally(function() { _this.$isLoading = false; }); }; VirtualMailbox.prototype.stopSearch = function() { - console.log("stopping search..."); + VirtualMailbox.$log.debug("stopping search..."); this.$isLoading = false; }; - + /** * @function getLength * @memberof Mailbox.prototype @@ -114,7 +114,7 @@ if (!angular.isDefined(this.$mailboxes)) return len; - + _.each(this.$mailboxes, function(mailbox) { len += mailbox.$messages.length; }); @@ -130,7 +130,7 @@ */ VirtualMailbox.prototype.getItemAtIndex = function(index) { var i, j, k, mailbox, message; - + if (angular.isDefined(this.$mailboxes) && index >= 0) { i = 0; for (j = 0; j < this.$mailboxes.length; j++) { @@ -138,7 +138,8 @@ for (k = 0; k < mailbox.$messages.length; i++, k++) { message = mailbox.$messages[k]; if (i == index) { - return message; + if (mailbox.$loadMessage(message.uid)) + return message; } } }