Improve performance by skipping redundant ENABLE commands

pull/13/head
Aleksander Machniak 12 years ago
parent d86aa138d0
commit 7ab9c17752

@ -917,18 +917,17 @@ class rcube_imap_cache
return;
}
// NOTE: make sure the mailbox isn't selected, before
// enabling QRESYNC and invoking SELECT
if ($this->imap->conn->selected !== null) {
$this->imap->conn->close();
}
// Enable QRESYNC
$res = $this->imap->conn->enable($qresync ? 'QRESYNC' : 'CONDSTORE');
if (!is_array($res)) {
if ($res === false) {
return;
}
// Close mailbox if already selected to get most recent data
if ($this->imap->conn->selected == $mailbox) {
$this->imap->conn->close();
}
// Get mailbox data (UIDVALIDITY, HIGHESTMODSEQ, counters, etc.)
$mbox_data = $this->imap->folder_data($mailbox);

@ -1472,14 +1472,31 @@ class rcube_imap_generic
*/
function enable($extension)
{
if (empty($extension))
if (empty($extension)) {
return false;
}
if (!$this->hasCapability('ENABLE'))
if (!$this->hasCapability('ENABLE')) {
return false;
}
if (!is_array($extension))
if (!is_array($extension)) {
$extension = array($extension);
}
if (!empty($this->extensions_enabled)) {
// check if all extensions are already enabled
$diff = array_diff($extension, $this->extensions_enabled);
if (empty($diff)) {
return $extension;
}
// Make sure the mailbox isn't selected, before enabling extension(s)
if ($this->selected !== null) {
$this->close();
}
}
list($code, $response) = $this->execute('ENABLE', $extension);
@ -1487,7 +1504,9 @@ class rcube_imap_generic
$response = substr($response, 10); // remove prefix "* ENABLED "
$result = (array) $this->tokenizeResponse($response);
return $result;
$this->extensions_enabled = array_unique(array_merge((array)$this->extensions_enabled, $result));
return $this->extensions_enabled;
}
return false;

Loading…
Cancel
Save