diff options
Diffstat (limited to 'program/include/rcube_imap.php')
-rw-r--r-- | program/include/rcube_imap.php | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 710a434f2..cfea18928 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -80,6 +80,7 @@ class rcube_imap private $db_header_fields = array('idx', 'uid', 'subject', 'from', 'to', 'cc', 'date', 'size'); private $options = array('auth_method' => 'check'); private $host, $user, $pass, $port, $ssl; + private $caching = false; /** * All (additional) headers used (in any way) by Roundcube @@ -3814,16 +3815,28 @@ class rcube_imap function set_caching($type) { if ($type) { - $rcmail = rcmail::get_instance(); - $this->cache = $rcmail->get_cache('IMAP', $type); + $this->caching = true; } else { if ($this->cache) $this->cache->close(); $this->cache = null; + $this->caching = false; } } + /** + * Getter for IMAP cache object + */ + private function get_cache_engine() + { + if ($this->caching && !$this->cache) { + $rcmail = rcmail::get_instance(); + $this->cache = $rcmail->get_cache('IMAP', $type); + } + + return $this->cache; + } /** * Returns cached value @@ -3834,8 +3847,8 @@ class rcube_imap */ function get_cache($key) { - if ($this->cache) { - return $this->cache->get($key); + if ($cache = $this->get_cache_engine()) { + return $cache->get($key); } } @@ -3848,8 +3861,8 @@ class rcube_imap */ function update_cache($key, $data) { - if ($this->cache) { - $this->cache->set($key, $data); + if ($cache = $this->get_cache_engine()) { + $cache->set($key, $data); } } @@ -3863,8 +3876,8 @@ class rcube_imap */ function clear_cache($key=null, $prefix_mode=false) { - if ($this->cache) { - $this->cache->remove($key, $prefix_mode); + if ($cache = $this->get_cache_engine()) { + $cache->remove($key, $prefix_mode); } } |