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']);
}
}
$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);
}
}
}
/**
* 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);
}
}
/* 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