(js) Fix issues with the mail advanced search

- fixed loading of headers when scrolling the virtual repeater;
- fixed viewing a single message;
- fixed search from a mailbox that contains subfolders.
pull/105/head
Francis Lachapelle 2015-09-14 13:48:06 -04:00
parent e30fb0d1fb
commit 47ab4b837c
4 changed files with 57 additions and 26 deletions

View File

@ -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;

View File

@ -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();

View File

@ -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);
});
}

View File

@ -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;
}
}
}