Pass uidvalidity to _updateMetaData() if possible to save a STATUS call
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 28 Jul 2009 04:08:54 +0000 (22:08 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 28 Jul 2009 04:09:50 +0000 (22:09 -0600)
framework/Imap_Client/lib/Horde/Imap/Client/Base.php
framework/Imap_Client/lib/Horde/Imap/Client/Socket.php

index e7cdf13..a8ff88a 100644 (file)
@@ -1959,7 +1959,7 @@ abstract class Horde_Imap_Client_Base
                             if (!empty($uids)) {
                                 $this->_fetch(array(Horde_Imap_Client::FETCH_FLAGS => true), array('changedsince' => $metadata['HICmodseq'], 'ids' => $uids));
                             }
-                            $this->_updateMetaData($this->_selected, $status_res['highestmodseq']);
+                            $this->_updateMetaData($this->_selected, $status_res['highestmodseq'], $status_res['uidvalidity']);
                         }
                     }
 
@@ -2639,7 +2639,7 @@ abstract class Horde_Imap_Client_Base
             $metadata = $this->_cache->getMetaData($mailbox, $uidvalid, array('HICmodseq'));
             if (!isset($metadata['HICmodseq']) ||
                 ($metadata['HICmodseq'] != $modseq)) {
-                $this->_updateMetaData($mailbox, array('HICmodseq' => $modseq));
+                $this->_updateMetaData($mailbox, array('HICmodseq' => $modseq), $uidvalid);
             }
         }
     }
@@ -2709,13 +2709,18 @@ abstract class Horde_Imap_Client_Base
     /**
      * Updates metadata for a mailbox.
      *
-     * @param string $mailbox  Mailbox to update.
-     * @param string $data     The data to update.
+     * @param string $mailbox    Mailbox to update.
+     * @param string $data       The data to update.
+     * @param integer $uidvalid  The uidvalidity of the mailbox.  If not set,
+     *                           do a status call to grab it.
      */
-    protected function _updateMetaData($mailbox, $data)
+    protected function _updateMetaData($mailbox, $data, $uidvalid = null)
     {
-        $status = $this->status($mailbox, Horde_Imap_Client::STATUS_UIDVALIDITY);
-        $this->_cache->setMetaData($mailbox, $status['uidvalidity'], $data);
+        if (is_null($uidvalid)) {
+            $status = $this->status($mailbox, Horde_Imap_Client::STATUS_UIDVALIDITY);
+            $uidvalid = $status['uidvalidity'];
+        }
+        $this->_cache->setMetaData($mailbox, $uidvalid, $data);
     }
 
 }
index ca3fe5f..bea0dc5 100644 (file)
@@ -1410,7 +1410,7 @@ class Horde_Imap_Client_Socket extends Horde_Imap_Client_Base
                 /* Update MODSEQ if active for mailbox. */
                 if (!empty($this->_temp['mailbox']['highestmodseq'])) {
                     if (isset($this->_init['enabled']['QRESYNC'])) {
-                        $this->_updateMetaData($mailbox, array('HICmodseq' => $this->_temp['mailbox']['highestmodseq']));
+                        $this->_updateMetaData($mailbox, array('HICmodseq' => $this->_temp['mailbox']['highestmodseq']), isset($this->_temp['mailbox']['uidvalidity']) ? $this->_temp['mailbox']['uidvalidity'] : null);
                     } else {
                         /* Unfortunately, RFC 4551 does not provide any method
                          * to obtain the HIGHESTMODSEQ after an EXPUNGE is