From 92f41168e139a6dd0caff474ba01e410fe31eb24 Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Mon, 27 Jul 2009 22:08:54 -0600 Subject: [PATCH] Pass uidvalidity to _updateMetaData() if possible to save a STATUS call --- framework/Imap_Client/lib/Horde/Imap/Client/Base.php | 19 ++++++++++++------- .../Imap_Client/lib/Horde/Imap/Client/Socket.php | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/Base.php b/framework/Imap_Client/lib/Horde/Imap/Client/Base.php index e7cdf13e1..a8ff88aec 100644 --- a/framework/Imap_Client/lib/Horde/Imap/Client/Base.php +++ b/framework/Imap_Client/lib/Horde/Imap/Client/Base.php @@ -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); } } diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php b/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php index ca3fe5f23..bea0dc5d8 100644 --- a/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php +++ b/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php @@ -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 -- 2.11.0