From 030c848b0d68321b711875886f90e680f232715b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 11 Dec 2008 03:30:00 -0500
Subject: [PATCH] - Performance: allow setting imap rootdir and delimiter before connect (#1485172)

---
 program/lib/imap.inc |   53 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 6fb60e9..7b53630 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -73,6 +73,8 @@
 		- fix iil_C_FetchPartHeader() in some cases by use of iil_C_HandlePartBody()
 		- allow iil_C_HandlePartBody() to fetch whole message
 		- optimize iil_C_FetchHeaders() to use only one FETCH command
+		- added 4th argument to iil_Connect()
+		- allow setting rootdir and delimiter before connect
 
 ********************************************************/
 
@@ -196,7 +198,7 @@
 }
 
 function iil_PutLine($fp, $string, $endln=true) {
-//      console('C: '. rtrim($string));
+      console('C: '. rtrim($string));
         return fputs($fp, $string . ($endln ? "\r\n" : ''));
 }
 
@@ -476,13 +478,14 @@
 
 function iil_C_NameSpace(&$conn) {
 	global $my_prefs;
+
+	if (isset($my_prefs['rootdir']) && is_string($my_prefs['rootdir'])) {
+    		$conn->rootdir = $my_prefs['rootdir'];
+		return true;
+	}
 	
 	if (!iil_C_GetCapability($conn, 'NAMESPACE')) {
 	    return false;
-	}
-    
-	if ($my_prefs["rootdir"]) {
-	    return true;
 	}
     
 	iil_PutLine($conn->fp, "ns1 NAMESPACE");
@@ -510,12 +513,13 @@
     
 	$conn->rootdir       = $first_userspace[0];
 	$conn->delimiter     = $first_userspace[1];
-	$my_prefs["rootdir"] = substr($conn->rootdir, 0, -1);
+	$my_prefs['rootdir'] = substr($conn->rootdir, 0, -1);
+	$my_prefs['delimiter'] = $conn->delimiter;
 	
 	return true;
 }
 
-function iil_Connect($host, $user, $password) {	
+function iil_Connect($host, $user, $password, $options=null) {	
 	global $iil_error, $iil_errornum;
 	global $ICL_SSL, $ICL_PORT;
 	global $IMAP_NO_CACHE;
@@ -523,18 +527,23 @@
 	
 	$iil_error = '';
 	$iil_errornum = 0;
-	
-	//set auth method
-	$auth_method = 'plain';
-	if (func_num_args() >= 4) {
-		$auth_array = func_get_arg(3);
-		if (is_array($auth_array)) {
-			$auth_method = $auth_array['imap'];
-    		}
-		if (empty($auth_method)) {
-        		$auth_method = "plain";
-    		}
+
+	// set some imap options
+	if (is_array($options)) {
+		foreach($options as $optkey => $optval) {
+			if ($optkey == 'imap') {
+				$auth_method = $optval;
+			} else if ($optkey == 'rootdir') {
+    				$my_prefs['rootdir'] = $optval;
+			} else if ($optkey == 'delimiter') {
+    				$my_prefs['delimiter'] = $optval;
+			}
+		}
 	}
+
+	if (empty($auth_method))
+    		$auth_method = 'plain';
+		
 	$message = "INITIAL: $auth_method\n";
 		
 	$result = false;
@@ -2138,8 +2147,14 @@
  * @see iil_Connect()
  */
 function iil_C_GetHierarchyDelimiter(&$conn) {
+
+	global $my_prefs;
+	
 	if ($conn->delimiter) {
-        return $conn->delimiter;
+    		return $conn->delimiter;
+	}
+	if (!empty($my_prefs['delimiter'])) {
+    	    return ($conn->delimiter = $my_prefs['delimiter']);
 	}
     
 	$fp        = $conn->fp;

--
Gitblit v1.9.1