Aleksander Machniak
2015-07-31 424c25e5bc71891ae8aafe17afe9859b2a2590d3
program/lib/Roundcube/rcube_imap.php
@@ -583,27 +583,30 @@
    /**
     * protected method for getting nr of messages
     * Protected method for getting number of messages
     *
     * @param string  $folder  Folder name
     * @param string  $mode    Mode for count [ALL|THREADS|UNSEEN|RECENT|EXISTS]
     * @param boolean $force   Force reading from server and update cache
     * @param boolean $status  Enables storing folder status info (max UID/count),
     *                         required for folder_status()
     * @param string  $folder    Folder name
     * @param string  $mode      Mode for count [ALL|THREADS|UNSEEN|RECENT|EXISTS]
     * @param boolean $force     Force reading from server and update cache
     * @param boolean $status    Enables storing folder status info (max UID/count),
     *                           required for folder_status()
     * @param boolean $no_search Ignore current search result
     *
     * @return int Number of messages
     * @see rcube_imap::count()
     */
    protected function countmessages($folder, $mode='ALL', $force=false, $status=true)
    protected function countmessages($folder, $mode = 'ALL', $force = false, $status = true, $no_search = false)
    {
        $mode = strtoupper($mode);
        // count search set, assume search set is always up-to-date (don't check $force flag)
        if ($this->search_string && $folder == $this->folder && ($mode == 'ALL' || $mode == 'THREADS')) {
        // Count search set, assume search set is always up-to-date (don't check $force flag)
        // @TODO: this could be handled in more reliable way, e.g. a separate method
        //        maybe in rcube_imap_search
        if (!$no_search && $this->search_string && $folder == $this->folder) {
            if ($mode == 'ALL') {
                return $this->search_set->count_messages();
            }
            else {
            else if ($mode == 'THREADS') {
                return $this->search_set->count();
            }
        }
@@ -1232,7 +1235,7 @@
        $old = $this->get_folder_stats($folder);
        // refresh message count -> will update
        $this->countmessages($folder, 'ALL', true);
        $this->countmessages($folder, 'ALL', true, true, true);
        $result = 0;
@@ -2871,7 +2874,7 @@
            if (is_array($a_folders) && $name == '*' && !empty($this->conn->data['LIST'])) {
                foreach ($a_folders as $idx => $folder) {
                    if (($opts = $this->conn->data['LIST'][$folder])
                        && in_array('\\NonExistent', $opts)
                        && in_array_nocase('\\NonExistent', $opts)
                    ) {
                        $this->conn->unsubscribe($folder);
                        unset($a_folders[$idx]);
@@ -3165,16 +3168,6 @@
        $result = $this->conn->createFolder($folder, $type ? array("\\" . ucfirst($type)) : null);
        // it's quite often situation that we're trying to create and subscribe
        // a folder that already exist, but is unsubscribed
        if (!$result) {
            if ($this->get_response_code() == rcube_storage::ALREADYEXISTS
                || preg_match('/already exists/i', $this->get_error_str())
            ) {
                $result = true;
            }
        }
        // try to subscribe it
        if ($result) {
            // clear cache
@@ -3408,7 +3401,7 @@
        if ($subscription) {
            // It's possible we already called LIST command, check LIST data
            if (!empty($this->conn->data['LIST']) && !empty($this->conn->data['LIST'][$folder])
                && in_array('\\Subscribed', $this->conn->data['LIST'][$folder])
                && in_array_nocase('\\Subscribed', $this->conn->data['LIST'][$folder])
            ) {
                $a_folders = array($folder);
            }