From 659cf14cdd8862a126b775392d59727a5e8a790b Mon Sep 17 00:00:00 2001 From: alecpl Date: Wed, 20 Oct 2010 18:42:45 +0000 Subject: - Improve performance of messages counting using ESEARCH extension (RFC4731) --- program/include/rcube_imap.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'program/include/rcube_imap.php') diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 5d90fe41f..4bf7cac88 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -539,19 +539,26 @@ class rcube_imap // use SEARCH for message counting else if ($this->skip_deleted) { $search_str = "ALL UNDELETED"; + $keys = array('COUNT'); + $need_uid = false; - // get message count and store in cache - if ($mode == 'UNSEEN') + if ($mode == 'UNSEEN') { $search_str .= " UNSEEN"; - // get message count using SEARCH + } + else if ($status) { + $keys[] = 'MAX'; + $need_uid = true; + } + + // get message count using (E)SEARCH // not very performant but more precise (using UNDELETED) - $index = $this->conn->search($mailbox, $search_str); + $index = $this->conn->search($mailbox, $search_str, $need_uid, $keys); - $count = is_array($index) ? count($index) : 0; + $count = is_array($index) ? $index['COUNT'] : 0; if ($mode == 'ALL' && $status) { $this->set_folder_stats($mailbox, 'cnt', $count); - $this->set_folder_stats($mailbox, 'maxuid', $index ? $this->_id2uid(max($index), $mailbox) : 0); + $this->set_folder_stats($mailbox, 'maxuid', is_array($index) ? $index['MAX'] : 0); } } else { -- cgit v1.2.3