Aleksander Machniak
2015-04-30 3aba794f70e9ddf5223d1c9c6f6f51856cdec13b
Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#1490372)

Conflicts:
CHANGELOG
2 files modified
40 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_imap_generic.php 39 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -8,6 +8,7 @@
- Fix missing or not up-to-date CATEGORIES entry in vCard export (#1490277)
- Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#1490293)
- Fix handling of %-encoded entities in mailto: URLs (#1490346)
- Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#1490372)
RELEASE 1.0.5
-------------
program/lib/Roundcube/rcube_imap_generic.php
@@ -1146,7 +1146,7 @@
        }
        // Clear internal status cache
        unset($this->data['STATUS:'.$mailbox]);
        $this->clear_status_cache($mailbox);
        if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) {
            $messages = self::compressMessageSet($messages);
@@ -1425,13 +1425,9 @@
     *
     * @return int Number of messages, False on error
     */
    function countMessages($mailbox, $refresh = false)
    function countMessages($mailbox)
    {
        if ($refresh) {
            $this->selected = null;
        }
        if ($this->selected === $mailbox) {
        if ($this->selected === $mailbox && isset($this->data['EXISTS'])) {
            return $this->data['EXISTS'];
        }
@@ -1459,14 +1455,20 @@
     */
    function countRecent($mailbox)
    {
        if (!strlen($mailbox)) {
            $mailbox = 'INBOX';
        if ($this->selected === $mailbox && isset($this->data['RECENT'])) {
            return $this->data['RECENT'];
        }
        $this->select($mailbox);
        // Check internal cache
        $cache = $this->data['STATUS:'.$mailbox];
        if (!empty($cache) && isset($cache['RECENT'])) {
            return (int) $cache['RECENT'];
        }
        if ($this->selected === $mailbox) {
            return $this->data['RECENT'];
        // Try STATUS (should be faster than SELECT)
        $counts = $this->status($mailbox, array('RECENT'));
        if (is_array($counts)) {
            return (int) $counts['RECENT'];
        }
        return false;
@@ -2085,7 +2087,7 @@
            // Clear internal status cache
            unset($this->data['STATUS:'.$to]);
            unset($this->data['STATUS:'.$from]);
            $this->clear_status_cache($from);
            $result = $this->execute('UID MOVE', array(
                $this->compressMessageSet($messages), $this->escape($to)),
@@ -3720,6 +3722,17 @@
    }
    /**
     * Clear internal status cache
     */
    protected function clear_status_cache($mailbox)
    {
        unset($this->data['STATUS:' . $mailbox]);
        unset($this->data['EXISTS']);
        unset($this->data['RECENT']);
        unset($this->data['UNSEEN']);
    }
    /**
     * Converts flags array into string for inclusion in IMAP command
     *
     * @param array $flags Flags (see self::flags)