diff options
| author | thomasb <thomasb@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-03-02 21:27:53 +0000 |
|---|---|---|
| committer | thomasb <thomasb@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-03-02 21:27:53 +0000 |
| commit | 4668bcf3ac6656f578f74c34bdad5a9428e99446 (patch) | |
| tree | 13c140745075e58c5110dd77a6e20fa3a931d934 /roundcubemail/program/include | |
| parent | a5286d4a7cb29f6d4bf9e5098a7de3ae7f8a98e9 (diff) | |
New recent check based on UIDs
git-svn-id: https://svn.roundcube.net/trunk@3306 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'roundcubemail/program/include')
| -rw-r--r-- | roundcubemail/program/include/rcube_imap.php | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/roundcubemail/program/include/rcube_imap.php b/roundcubemail/program/include/rcube_imap.php index e485226f8..c9d2454b1 100644 --- a/roundcubemail/program/include/rcube_imap.php +++ b/roundcubemail/program/include/rcube_imap.php @@ -495,6 +495,9 @@ class rcube_imap if (!$force && is_array($a_mailbox_cache[$mailbox]) && isset($a_mailbox_cache[$mailbox][$mode])) return $a_mailbox_cache[$mailbox][$mode]; + if (!is_array($a_mailbox_cache[$mailbox])) + $a_mailbox_cache[$mailbox] = array(); + // RECENT count is fetched a bit different if ($mode == 'RECENT') $count = iil_C_CheckForRecent($this->conn, $mailbox); @@ -513,17 +516,15 @@ class rcube_imap $index = $this->_search_index($mailbox, $search_str); $count = is_array($index) ? count($index) : 0; } - else - { + else { if ($mode == 'UNSEEN') $count = iil_C_CountUnseen($this->conn, $mailbox); - else + else { $count = iil_C_CountMessages($this->conn, $mailbox); + $_SESSION['maxuid'][$mailbox] = $count ? $this->_id2uid($count) : 0; } + } - if (!is_array($a_mailbox_cache[$mailbox])) - $a_mailbox_cache[$mailbox] = array(); - $a_mailbox_cache[$mailbox][$mode] = (int)$count; // write back to cache @@ -863,7 +864,31 @@ class rcube_imap return count($a_msg_headers); } + + /** + * Fetches IDS of pseudo recent messages. + * + * We compare the maximum UID to determine the number of + * new messages because the RECENT flag is not reliable. + * + * @param string Mailbox/folder name + * @return array List of recent message UIDs + */ + function recent_uids($mbox_name = null, $nofetch = false) + { + $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox; + $old_maxuid = intval($_SESSION['maxuid'][$mailbox]); + + // refresh message count -> will update $_SESSION['maxuid'][$mailbox] + $this->messagecount($mbox_name, 'ALL', true); + if ($_SESSION['maxuid'][$mailbox] > $old_maxuid) { + $maxuid = max(1, $old_maxuid+1); + return array_values((array)iil_C_FetchHeaderIndex($this->conn, $mailbox, "$maxuid:*", 'UID', $this->skip_deleted, true)); + } + + return array(); + } /** * Return sorted array of message IDs (not UIDs) |
