Use MODSEQ as cache ID if available
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 17 Mar 2009 10:28:47 +0000 (04:28 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 17 Mar 2009 10:28:47 +0000 (04:28 -0600)
imp/lib/Mailbox.php

index 651b823..e870fb9 100644 (file)
@@ -730,9 +730,20 @@ class IMP_Mailbox
         if (!$this->_searchmbox) {
             $sortpref = IMP::getSort($this->_mailbox);
 
+            /* Use MODSEQ as cache ID if CONDSTORE extension is available. */
+            if ($GLOBALS['imp_imap']->ob->queryCapability('CONDSTORE')) {
+                $condstore = true;
+                $query = Horde_Imap_Client::STATUS_HIGHESTMODSEQ;
+            } else {
+                $condstore = false;
+                $query = Horde_Imap_Client::STATUS_MESSAGES | Horde_Imap_Client::STATUS_UIDNEXT | Horde_Imap_Client::STATUS_UIDVALIDITY;
+            }
+
             try {
-                $status = $GLOBALS['imp_imap']->ob->status($this->_mailbox, Horde_Imap_Client::STATUS_MESSAGES | Horde_Imap_Client::STATUS_UIDNEXT | Horde_Imap_Client::STATUS_UIDVALIDITY);
-                return implode('|', array($status['uidvalidity'], $status['uidnext'], $status['messages'], $sortpref['by'], $sortpref['dir']));
+                $status = $GLOBALS['imp_imap']->ob->status($this->_mailbox, $query);
+                return $condstore
+                    ? $status['highestmodseq']
+                    : implode('|', array($status['uidvalidity'], $status['uidnext'], $status['messages'], $sortpref['by'], $sortpref['dir']));
             } catch (Horde_Imap_Client_Exception $e) {}
         }