Code improvements: CS fixes, improved internal cache cleanup on folder selection, removed redundant cache

pull/300/head
Aleksander Machniak 9 years ago
parent aada285660
commit 85f4209074

@ -62,7 +62,6 @@ class rcube_imap extends rcube_storage
protected $sort_field = ''; protected $sort_field = '';
protected $sort_order = 'DESC'; protected $sort_order = 'DESC';
protected $struct_charset; protected $struct_charset;
protected $uid_id_map = array();
protected $msg_headers = array(); protected $msg_headers = array();
protected $search_set; protected $search_set;
protected $search_string = ''; protected $search_string = '';
@ -2682,7 +2681,6 @@ class rcube_imap extends rcube_storage
// really deleted from the folder // really deleted from the folder
$this->expunge_message($uids, $folder, false); $this->expunge_message($uids, $folder, false);
$this->clear_messagecount($folder); $this->clear_messagecount($folder);
unset($this->uid_id_map[$folder]);
// unset threads internal cache // unset threads internal cache
unset($this->icache['threads']); unset($this->icache['threads']);
@ -3963,8 +3961,6 @@ class rcube_imap extends rcube_storage
return $res; return $res;
} }
return null;
} }
/** /**
@ -3985,7 +3981,6 @@ class rcube_imap extends rcube_storage
} }
// @TODO: log error // @TODO: log error
return null;
} }
@ -4254,19 +4249,11 @@ class rcube_imap extends rcube_storage
$folder = $this->folder; $folder = $this->folder;
} }
if ($uid = array_search($id, (array)$this->uid_id_map[$folder])) {
return $uid;
}
if (!$this->check_connection()) { if (!$this->check_connection()) {
return null; return null;
} }
$uid = $this->conn->ID2UID($folder, $id); return $this->conn->ID2UID($folder, $id);
$this->uid_id_map[$folder][$uid] = $id;
return $uid;
} }
/** /**

@ -986,7 +986,7 @@ class rcube_imap_cache
return false; return false;
} }
// ... and max UID // ... and max UID
if ($object->max() != $this->imap->id2uid($mbox_data['EXISTS'], $mailbox, true)) { if ($object->max() != $this->imap->id2uid($mbox_data['EXISTS'], $mailbox)) {
return false; return false;
} }
} }

@ -1095,6 +1095,8 @@ class rcube_imap_generic
list($code, $response) = $this->execute('SELECT', $params); list($code, $response) = $this->execute('SELECT', $params);
if ($code == self::ERROR_OK) { if ($code == self::ERROR_OK) {
$this->clear_mailbox_cache();
$response = explode("\r\n", $response); $response = explode("\r\n", $response);
foreach ($response as $line) { foreach ($response as $line) {
if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT)$/i', $line, $m)) { if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT)$/i', $line, $m)) {
@ -2034,7 +2036,6 @@ class rcube_imap_generic
return (int) $arr[0]; return (int) $arr[0];
} }
} }
return null;
} }
/** /**
@ -2055,14 +2056,20 @@ class rcube_imap_generic
return null; return null;
} }
if ($uid = $this->data['UID-MAP'][$id]) {
return $uid;
}
if (isset($this->data['EXISTS']) && $id > $this->data['EXISTS']) {
return null;
}
$index = $this->search($mailbox, $id, true); $index = $this->search($mailbox, $id, true);
if ($index->count() == 1) { if ($index->count() == 1) {
$arr = $index->get(); $arr = $index->get();
return (int) $arr[0]; return $this->data['UID-MAP'][$id] = (int) $arr[0];
} }
return null;
} }
/** /**
@ -3849,9 +3856,27 @@ class rcube_imap_generic
protected function clear_status_cache($mailbox) protected function clear_status_cache($mailbox)
{ {
unset($this->data['STATUS:' . $mailbox]); unset($this->data['STATUS:' . $mailbox]);
unset($this->data['EXISTS']);
unset($this->data['RECENT']); $keys = array('EXISTS', 'RECENT', 'UNSEEN', 'UID-MAP');
unset($this->data['UNSEEN']);
foreach ($keys as $key) {
unset($this->data[$key]);
}
}
/**
* Clear internal cache of the current mailbox
*/
protected function clear_mailbox_cache()
{
$this->clear_status_cache($this->selected);
$keys = array('UIDNEXT', 'UIDVALIDITY', 'HIGHESTMODSEQ', 'NOMODSEQ',
'PERMANENTFLAGS', 'QRESYNC', 'VANISHED', 'READ-WRITE');
foreach ($keys as $key) {
unset($this->data[$key]);
}
} }
/** /**

Loading…
Cancel
Save