diff options
Diffstat (limited to 'program/include')
| -rw-r--r-- | program/include/rcube_imap_cache.php | 27 | 
1 files changed, 23 insertions, 4 deletions
| diff --git a/program/include/rcube_imap_cache.php b/program/include/rcube_imap_cache.php index d30438622..8ef5b71cb 100644 --- a/program/include/rcube_imap_cache.php +++ b/program/include/rcube_imap_cache.php @@ -813,9 +813,16 @@ class rcube_imap_cache          }          // 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 @@ class rcube_imap_cache                      rcube_imap_generic::compressMessageSet($index['uid']));                  if (!empty($ids)) { -                    $index = null; // cache invalid +                    return false;                  }              }          } @@ -996,12 +1003,22 @@ class rcube_imap_cache              !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 @@ class rcube_imap_cache                      // Invalidate thread indexes (?)                      $this->remove_thread($mailbox); +                    // Invalidate index +                    $index['valid'] = false;                  }              }          } | 
