From 322b79db06cfd0d9a0ca5c63536c36265d5ce7d2 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 20 Nov 2008 03:46:59 -0500
Subject: [PATCH] - Speed up raw message body handling (call FETCH only once for the whole message insteade of twice for headers and body)

---
 CHANGELOG                      |    1 +
 program/include/rcube_imap.php |    7 +------
 program/lib/imap.inc           |    6 ++----
 3 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 8a63792..3509733 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,7 @@
 2008/11/19 (alec)
 ----------
 - Fix handling of some malformed messages (#1484438)
+- Speed up raw message body handling
 
 2008/11/15 (alec)
 ----------
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 9b50702..856858b 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -1436,10 +1436,7 @@
     if (!($msg_id = $this->_uid2id($uid)))
       return FALSE;
 
-    $body = iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
-    $body .= iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 1);
-
-    return $body;    
+    return iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id);
     }
 
 
@@ -1470,8 +1467,6 @@
     if (!($msg_id = $this->_uid2id($uid)))
       return FALSE;
 
-    print iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
-    flush();
     iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 2);
     }
 
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 0f540dd..65cc5c6 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -71,6 +71,7 @@
 		- added BYE response simple support for endless loop prevention
 		- added 3rd argument in iil_StartsWith* functions
 		- fix iil_C_FetchPartHeader() in some cases by use of iil_C_HandlePartBody()
+		- allow iil_C_HandlePartBody() to fetch whole message
 
 ********************************************************/
 
@@ -2375,7 +2376,7 @@
 	return iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, 1);
 }
 
-function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode, $file=NULL) {
+function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part='', $mode=1, $file=NULL) {
 	/* modes:
         1: return string (or write to $file pointer)
         2: print
@@ -2384,9 +2385,6 @@
 	
 	$fp     = $conn->fp;
 	$result = false;
-	if (empty($part)) {
-		$part = 'TEXT';
-	}
 
 	if (iil_C_Select($conn, $mailbox)) {
     		$reply_key = '* ' . $id;

--
Gitblit v1.9.1