diff options
| -rw-r--r-- | CHANGELOG | 4 | ||||
| -rw-r--r-- | program/include/rcube_imap.php | 19 | 
2 files changed, 15 insertions, 8 deletions
@@ -1,6 +1,10 @@  CHANGELOG RoundCube Webmail  --------------------------- +2009/02/04 (alec) +---------- +- performance fix: don't fetch attachment headers twice when parse filename cont. values +  2009/02/02 (alec)  ----------  - Fix checking for recent messages on various IMAP servers (#1485702) diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 032489c50..d4bcc7462 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -1248,7 +1248,7 @@ class rcube_imap      }      // normalize filename property -    $this->_set_part_filename($struct); +    $this->_set_part_filename($struct, $raw_headers);      return $struct;      } @@ -1259,8 +1259,9 @@ class rcube_imap     *     * @access private     * @param  object rcube_message_part Part object +   * @param  string Part's raw headers     */ -  function _set_part_filename(&$part) +  function _set_part_filename(&$part, $headers=null)      {      if (!empty($part->d_parameters['filename']))        $filename_mime = $part->d_parameters['filename']; @@ -1278,10 +1279,9 @@ class rcube_imap        }        // some servers (eg. dovecot-1.x) have no support for parameter value continuations        // we must fetch and parse headers "manually" -      //TODO: fetching headers for a second time is not effecient, this code should be moved somewhere earlier --tensor        if ($i<2) { -        // TODO: fetch only Content-Type/Content-Disposition header -        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id); +	if (!$headers) +          $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);          $filename_mime = '';          $i = 0;          while (preg_match('/filename\*'.$i.'\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) { @@ -1297,7 +1297,8 @@ class rcube_imap          $i++;        }        if ($i<2) { -        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id); +	if (!$headers) +          $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);          $filename_encoded = '';          $i = 0; $matches = array();          while (preg_match('/filename\*'.$i.'\*\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) { @@ -1313,7 +1314,8 @@ class rcube_imap          $i++;        }        if ($i<2) { -        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id); +	if (!$headers) +          $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);          $filename_mime = '';          $i = 0; $matches = array();          while (preg_match('/\s+name\*'.$i.'\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) { @@ -1329,7 +1331,8 @@ class rcube_imap          $i++;        }        if ($i<2) { -        $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id); +	if (!$headers) +          $headers = iil_C_FetchPartHeader($this->conn, $this->mailbox, $this->_msg_id, $part->mime_id);          $filename_encoded = '';          $i = 0; $matches = array();          while (preg_match('/\s+name\*'.$i.'\*\s*=\s*"*([^"\n;]+)[";]*/', $headers, $matches)) {  | 
