diff options
author | Aleksander Machniak <alec@alec.pl> | 2012-11-22 19:38:41 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2012-11-22 19:38:41 +0100 |
commit | d0edbfb33dc78591bd0ad0263ca9923065546d5f (patch) | |
tree | 7d0b003aa4d3079dd7291cd9d328e493bd93f3d2 /program/lib/Roundcube/rcube_imap.php | |
parent | 15cf4fa9251f01313b5eb5cf1a91ec10643d42cb (diff) |
Fix cache (in)validation after setting \Deleted flag
Diffstat (limited to 'program/lib/Roundcube/rcube_imap.php')
-rw-r--r-- | program/lib/Roundcube/rcube_imap.php | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php index 9054b6bab..4e0d2225c 100644 --- a/program/lib/Roundcube/rcube_imap.php +++ b/program/lib/Roundcube/rcube_imap.php @@ -2188,10 +2188,10 @@ class rcube_imap extends rcube_storage $result = $this->conn->flag($folder, $uids, $flag); } - if ($result) { + if ($result && !$skip_cache) { // reload message headers if cached - // @TODO: update flags instead removing from cache - if (!$skip_cache && ($mcache = $this->get_mcache_engine())) { + // update flags instead removing from cache + if ($mcache = $this->get_mcache_engine()) { $status = strpos($flag, 'UN') !== 0; $mflag = preg_replace('/^UN/', '', $flag); $mcache->change_flag($folder, $all_mode ? null : explode(',', $uids), @@ -2203,8 +2203,12 @@ class rcube_imap extends rcube_storage $this->clear_messagecount($folder, 'SEEN'); $this->clear_messagecount($folder, 'UNSEEN'); } - else if ($flag == 'DELETED') { + else if ($flag == 'DELETED' || $flag == 'UNDELETED') { $this->clear_messagecount($folder, 'DELETED'); + // remove cached messages + if ($this->options['skip_deleted']) { + $this->clear_message_cache($folder, $all_mode ? null : explode(',', $uids)); + } } } |