diff options
author | alecpl <alec@alec.pl> | 2008-09-16 08:49:28 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2008-09-16 08:49:28 +0000 |
commit | 81b573d98ae143bd11b37ff2027bfad78e2d460c (patch) | |
tree | 11975b2cfc8fc6affdb5e1ecf92728fd66b536ab /program/include | |
parent | cf507b27accdfc1b6fde138e2f7fadf010c8a43c (diff) |
- Reduced memory footprint when forwarding attachments (#1485345)
- Fixed endless loop in iil_C_HandlePartBody()
- rcube_message::get_part_content() speed up using 3rd argument of rcube_imap::get_message_part()
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/rcube_imap.php | 17 | ||||
-rw-r--r-- | program/include/rcube_message.php | 5 |
2 files changed, 17 insertions, 5 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 1b5ec1670..54f0757b7 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -1283,9 +1283,10 @@ class rcube_imap * @param string Part number * @param object rcube_message_part Part object created by get_structure() * @param mixed True to print part, ressource to write part contents in + * @param resource File pointer to save the message part * @return string Message/part body if not printed */ - function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL) + function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL, $fp=NULL) { if (!($msg_id = $this->_uid2id($uid))) return FALSE; @@ -1293,6 +1294,7 @@ class rcube_imap // get part encoding if not provided if (!is_object($o_part)) { + write_log('errors', 'get_message_part: !is_object'); $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id); $structure = iml_GetRawStructureArray($structure_str); $part_type = iml_GetPartTypeCode($structure, $part); @@ -1318,7 +1320,10 @@ class rcube_imap } else { - $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1); + if ($fp && $o_part->encoding == 'base64') + return iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 3, $fp); + else + $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1); // decode part body if ($o_part->encoding) @@ -1333,8 +1338,14 @@ class rcube_imap $body = rcube_charset_convert($body, $o_part->charset); } + + if ($fp) + { + fwrite($fp, $body); + return true; + } } - + return $body; } diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php index c18db4bdd..f2e4be3ef 100644 --- a/program/include/rcube_message.php +++ b/program/include/rcube_message.php @@ -117,12 +117,13 @@ class rcube_message * Get content of a specific part of this message * * @param string Part MIME-ID + * @param resource File pointer to save the message part * @return string Part content */ - public function get_part_content($mime_id) + public function get_part_content($mime_id, $fp=NULL) { if ($part = $this->mime_parts[$mime_id]) - return $this->imap->get_message_part($this->uid, $mime_id, $part); + return $this->imap->get_message_part($this->uid, $mime_id, $part, NULL, $fp); else return null; } |