From 1e7aa75d18e34b0733d49a3af689be0f3d73b83c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Wed, 24 Oct 2012 04:05:22 -0400 Subject: [PATCH] Remove leftover code --- program/include/rcube_imap_generic.php | 117 ++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 81 insertions(+), 36 deletions(-) diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php index 197164d..52bf0e3 100644 --- a/program/include/rcube_imap_generic.php +++ b/program/include/rcube_imap_generic.php @@ -313,8 +313,12 @@ else { $this->resultcode = null; // parse response for [APPENDUID 1204196876 3456] - if (preg_match("/^\[APPENDUID [0-9]+ ([0-9,:*]+)\]/i", $str, $m)) { + if (preg_match("/^\[APPENDUID [0-9]+ ([0-9]+)\]/i", $str, $m)) { $this->data['APPENDUID'] = $m[1]; + } + // parse response for [COPYUID 1204196876 3456:3457 123:124] + else if (preg_match("/^\[COPYUID [0-9]+ ([0-9,:]+) ([0-9,:]+)\]/i", $str, $m)) { + $this->data['COPYUID'] = array($m[1], $m[2]); } } $this->result = $str; @@ -526,6 +530,7 @@ } else { $authc = $user; + $user = ''; } $auth_sasl = Auth_SASL::factory('digestmd5'); $reply = base64_encode($auth_sasl->getResponse($authc, $pass, @@ -564,6 +569,7 @@ } else { $authc = $user; + $user = ''; } $reply = base64_encode($user . chr(0) . $authc . chr(0) . $pass); @@ -1950,6 +1956,9 @@ */ function copy($messages, $from, $to) { + // Clear last COPYUID data + unset($this->data['COPYUID']); + if (!$this->select($from)) { return false; } @@ -2171,7 +2180,7 @@ $result[$id]->encoding = $string; break; case 'content-type': - $ctype_parts = preg_split('/[; ]/', $string); + $ctype_parts = preg_split('/[; ]+/', $string); $result[$id]->ctype = strtolower(array_shift($ctype_parts)); if (preg_match('/charset\s*=\s*"?([a-z0-9\-\.\_]+)"?/i', $string, $regs)) { $result[$id]->charset = $regs[1]; @@ -2370,7 +2379,7 @@ return $this->handlePartBody($mailbox, $id, $is_uid, $part); } - function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL) + function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL, $formatted=true) { if (!$this->select($mailbox)) { return false; @@ -2393,15 +2402,22 @@ $mode = 0; } + // Use BINARY extension when possible (and safe) + $binary = $mode && preg_match('/^[0-9.]+$/', $part) && $this->hasCapability('BINARY'); + $fetch_mode = $binary ? 'BINARY' : 'BODY'; + // format request - $reply_key = '* ' . $id; $key = $this->nextTag(); - $request = $key . ($is_uid ? ' UID' : '') . " FETCH $id (BODY.PEEK[$part])"; + $request = $key . ($is_uid ? ' UID' : '') . " FETCH $id ($fetch_mode.PEEK[$part])"; // send request if (!$this->putLine($request)) { $this->setError(self::ERROR_COMMAND, "Unable to send command: $request"); return false; + } + + if ($binary) { + $mode = -1; } // receive reply line @@ -2448,13 +2464,13 @@ $prev = ''; while ($bytes > 0) { - $line = $this->readLine(4096); + $line = $this->readLine(8192); if ($line === NULL) { break; } - $len = strlen($line); + $len = strlen($line); if ($len > $bytes) { $line = substr($line, 0, $bytes); @@ -2487,7 +2503,7 @@ continue; $line = convert_uudecode($line); // default - } else { + } else if ($formatted) { $line = rtrim($line, "\t\r\n\0\x0B") . "\n"; } @@ -2524,14 +2540,16 @@ * * @param string $mailbox Mailbox name * @param string $message Message content + * @param array $flags Message flags + * @param string $date Message internal date * * @return string|bool On success APPENDUID response (if available) or True, False on failure */ - function append($mailbox, &$message) + function append($mailbox, &$message, $flags = array(), $date = null) { unset($this->data['APPENDUID']); - if (!$mailbox) { + if ($mailbox === null || $mailbox === '') { return false; } @@ -2543,12 +2561,17 @@ return false; } + // build APPEND command $key = $this->nextTag(); - $request = sprintf("$key APPEND %s (\\Seen) {%d%s}", $this->escape($mailbox), - $len, ($this->prefs['literal+'] ? '+' : '')); + $request = "$key APPEND " . $this->escape($mailbox) . ' (' . $this->flagsToStr($flags) . ')'; + if (!empty($date)) { + $request .= ' ' . $this->escape($date); + } + $request .= ' {' . $len . ($this->prefs['literal+'] ? '+' : '') . '}'; + // send APPEND command if ($this->putLine($request)) { - // Don't wait when LITERAL+ is supported + // Do not wait when LITERAL+ is supported if (!$this->prefs['literal+']) { $line = $this->readReply(); @@ -2589,14 +2612,16 @@ * @param string $mailbox Mailbox name * @param string $path Path to the file with message body * @param string $headers Message headers + * @param array $flags Message flags + * @param string $date Message internal date * * @return string|bool On success APPENDUID response (if available) or True, False on failure */ - function appendFromFile($mailbox, $path, $headers=null) + function appendFromFile($mailbox, $path, $headers=null, $flags = array(), $date = null) { unset($this->data['APPENDUID']); - if (!$mailbox) { + if ($mailbox === null || $mailbox === '') { return false; } @@ -2605,6 +2630,7 @@ if (file_exists(realpath($path))) { $in_fp = fopen($path, 'r'); } + if (!$in_fp) { $this->setError(self::ERROR_UNKNOWN, "Couldn't open $path for reading"); return false; @@ -2622,11 +2648,15 @@ $len += strlen($headers) + strlen($body_separator); } - // send APPEND command + // build APPEND command $key = $this->nextTag(); - $request = sprintf("$key APPEND %s (\\Seen) {%d%s}", $this->escape($mailbox), - $len, ($this->prefs['literal+'] ? '+' : '')); + $request = "$key APPEND " . $this->escape($mailbox) . ' (' . $this->flagsToStr($flags) . ')'; + if (!empty($date)) { + $request .= ' ' . $this->escape($date); + } + $request .= ' {' . $len . ($this->prefs['literal+'] ? '+' : '') . '}'; + // send APPEND command if ($this->putLine($request)) { // Don't wait when LITERAL+ is supported if (!$this->prefs['literal+']) { @@ -3195,10 +3225,10 @@ */ static function getStructurePartData($structure, $part) { - $part_a = self::getStructurePartArray($structure, $part); - $data = array(); + $part_a = self::getStructurePartArray($structure, $part); + $data = array(); - if (empty($part_a)) { + if (empty($part_a)) { return $data; } @@ -3231,13 +3261,13 @@ static function getStructurePartArray($a, $part) { - if (!is_array($a)) { + if (!is_array($a)) { return false; } if (empty($part)) { - return $a; - } + return $a; + } $ctype = is_string($a[0]) && is_string($a[1]) ? $a[0] . '/' . $a[1] : ''; @@ -3245,20 +3275,17 @@ $a = $a[8]; } - if (strpos($part, '.') > 0) { - $orig_part = $part; - $pos = strpos($part, '.'); - $rest = substr($orig_part, $pos+1); - $part = substr($orig_part, 0, $pos); + if (strpos($part, '.') > 0) { + $orig_part = $part; + $pos = strpos($part, '.'); + $rest = substr($orig_part, $pos+1); + $part = substr($orig_part, 0, $pos); - return self::getStructurePartArray($a[$part-1], $rest); - } + return self::getStructurePartArray($a[$part-1], $rest); + } else if ($part > 0) { - if (is_array($a[$part-1])) - return $a[$part-1]; - else - return $a; - } + return (is_array($a[$part-1])) ? $a[$part-1] : $a; + } } /** @@ -3532,6 +3559,24 @@ } /** + * Converts flags array into string for inclusion in IMAP command + * + * @param array $flags Flags (see self::flags) + * + * @return string Space-separated list of flags + */ + private function flagsToStr($flags) + { + foreach ((array)$flags as $idx => $flag) { + if ($flag = $this->flags[strtoupper($flag)]) { + $flags[$idx] = $flag; + } + } + + return implode(' ', (array)$flags); + } + + /** * Converts datetime string into unix timestamp * * @param string $date Date string -- Gitblit v1.9.1