Aleksander Machniak
2013-03-14 5c26bd49b10a2666df9e4853b0740038b0cc3b88
program/lib/Roundcube/rcube_imap_generic.php
@@ -753,12 +753,16 @@
        $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr, $this->prefs['timeout']);
        if (!$this->fp) {
            if (!$errstr) {
                $errstr = "Unknown reason (fsockopen() function disabled?)";
            }
            $this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s", $host, $this->prefs['port'], $errstr));
            return false;
        }
        if ($this->prefs['timeout'] > 0)
        if ($this->prefs['timeout'] > 0) {
            stream_set_timeout($this->fp, $this->prefs['timeout']);
        }
        $line = trim(fgets($this->fp, 8192));
@@ -902,7 +906,7 @@
     */
    function closeConnection()
    {
        if ($this->putLine($this->nextTag() . ' LOGOUT')) {
        if ($this->logged && $this->putLine($this->nextTag() . ' LOGOUT')) {
            $this->readReply();
        }
@@ -1061,8 +1065,8 @@
    /**
     * Executes EXPUNGE command
     *
     * @param string $mailbox  Mailbox name
     * @param string $messages Message UIDs to expunge
     * @param string       $mailbox  Mailbox name
     * @param string|array $messages Message UIDs to expunge
     *
     * @return boolean True on success, False on error
     */
@@ -1080,10 +1084,13 @@
        // Clear internal status cache
        unset($this->data['STATUS:'.$mailbox]);
        if ($messages)
            $result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE);
        else
        if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) {
            $messages = self::compressMessageSet($messages);
            $result   = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE);
        }
        else {
            $result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE);
        }
        if ($result == self::ERROR_OK) {
            $this->selected = null; // state has changed, need to reselect
@@ -1306,6 +1313,11 @@
                // * LIST (<options>) <delimiter> <mailbox>
                if ($cmd == 'LIST' || $cmd == 'LSUB') {
                    list($opts, $delim, $mailbox) = $this->tokenizeResponse($line, 3);
                    // Remove redundant separator at the end of folder name, UW-IMAP bug? (#1488879)
                    if ($delim) {
                        $mailbox = rtrim($mailbox, $delim);
                    }
                    // Add to result array
                    if (!$lstatus) {
@@ -1971,7 +1983,6 @@
    /**
     * Moves message(s) from one folder to another.
     * Original message(s) will be marked as deleted.
     *
     * @param string|array  $messages  Message UID(s)
     * @param string        $from      Mailbox name
@@ -1990,14 +2001,39 @@
            return false;
        }
        $r = $this->copy($messages, $from, $to);
        // use MOVE command (RFC 6851)
        if ($this->hasCapability('MOVE')) {
            // Clear last COPYUID data
            unset($this->data['COPYUID']);
        if ($r) {
            // Clear internal status cache
            unset($this->data['STATUS:'.$to]);
            unset($this->data['STATUS:'.$from]);
            return $this->flag($from, $messages, 'DELETED');
            $r = $this->execute('UID MOVE', array(
                $this->compressMessageSet($messages), $this->escape($to)),
                self::COMMAND_NORESPONSE);
        }
        // use COPY + STORE +FLAGS.SILENT \Deleted + EXPUNGE
        else {
            $r = $this->copy($messages, $from, $to);
            if ($r) {
                // Clear internal status cache
                unset($this->data['STATUS:'.$from]);
                $r = $this->flag($from, $messages, 'DELETED');
                if ($messages == '*') {
                    // CLOSE+SELECT should be faster than EXPUNGE
                    $this->close();
                }
                else {
                    $this->expunge($from, $messages);
                }
            }
        }
        return $r;
    }
@@ -3493,7 +3529,7 @@
            // if less than 255 bytes long, let's not bother
            if (!$force && strlen($messages)<255) {
                return $messages;
           }
            }
            // see if it's already been compressed
            if (strpos($messages, ':') !== false) {