diff options
Diffstat (limited to 'program/include/rcube_imap.php')
-rw-r--r-- | program/include/rcube_imap.php | 19 |
1 files changed, 13 insertions, 6 deletions
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 { |