alecpl
2011-09-20 37d511ff380e34a015dcc09b79704b33e3cf06b3
- Fix cached indexes validation after removing messages when skip_deleted=true


1 files modified
27 ■■■■ changed files
program/include/rcube_imap_cache.php 27 ●●●● patch | view | raw | blame | history
program/include/rcube_imap_cache.php
@@ -813,9 +813,16 @@
        }
        // Folder is empty but cache isn't
        if (empty($mbox_data['EXISTS']) && (!empty($index['seq']) || !empty($index['tree']))) {
            $this->clear($mailbox);
            $exists = false;
        if (empty($mbox_data['EXISTS'])) {
            if (!empty($index['seq']) || !empty($index['tree'])) {
                $this->clear($mailbox);
                $exists = false;
                return false;
            }
        }
        // Folder is not empty but cache is
        else if (empty($index['seq']) && empty($index['tree'])) {
            unset($this->icache[$mailbox][$is_thread ? 'thread' : 'index']);
            return false;
        }
@@ -880,7 +887,7 @@
                    rcube_imap_generic::compressMessageSet($index['uid']));
                if (!empty($ids)) {
                    $index = null; // cache invalid
                    return false;
                }
            }
        }
@@ -996,12 +1003,22 @@
            !empty($uids) ? $uids : '1:*', true, array('FLAGS'),
            $index['modseq'], $qresync);
        $invalidated = false;
        if (!empty($result)) {
            foreach ($result as $id => $msg) {
                $uid = $msg->uid;
                // Remove deleted message
                if ($this->skip_deleted && !empty($msg->flags['DELETED'])) {
                    $this->remove_message($mailbox, $uid);
                    if (!$invalidated) {
                        $invalidated = true;
                        // Invalidate thread indexes (?)
                        $this->remove_thread($mailbox);
                        // Invalidate index
                        $index['valid'] = false;
                    }
                    continue;
                }
@@ -1036,6 +1053,8 @@
                    // Invalidate thread indexes (?)
                    $this->remove_thread($mailbox);
                    // Invalidate index
                    $index['valid'] = false;
                }
            }
        }