summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2009-02-04 11:16:17 +0000
committeralecpl <alec@alec.pl>2009-02-04 11:16:17 +0000
commit6e047cff291d9948de70e2abb36abd3f74d65888 (patch)
tree859bd938cf43056382ec8a39ba50197727e9f59c /program/include
parent9b4aaa79d3cc1cded4e8a3bd11063994152fccc7 (diff)
- performance fix: don't fetch attachment headers twice when parse filename cont. values
Diffstat (limited to 'program/include')
-rw-r--r--program/include/rcube_imap.php19
1 files changed, 11 insertions, 8 deletions
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)) {