From 2aa2b332f6e216ceeabc36ef6b942c40d91bda5a Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 08 Sep 2010 05:40:39 -0400
Subject: [PATCH] - Small performance improvements

---
 program/include/rcube_imap_generic.php |   55 ++++++++++++++++++++++++++-----------------------------
 1 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index fcde08c..0c69c23 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -749,31 +749,24 @@
 
 	    if ($this->putLine("sel1 SELECT \"".$this->escape($mailbox).'"')) {
 		    do {
-			    $line = rtrim($this->readLine(300));
-			    $a = explode(' ', $line);
-			    if (count($a) == 3) {
-				    $token = strtoupper($a[2]);
-				    if ($token == 'EXISTS') {
-					    $this->exists = (int) $a[1];
-				    }
-				    else if ($token == 'RECENT') {
-					    $this->recent = (int) $a[1];
-				    }
+			    $line = rtrim($this->readLine(512));
+
+			    if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT)$/', $line, $m)) {
+			        $token = strtolower($m[2]);
+			        $this->$token = (int) $m[1];
 			    }
 			    else if (preg_match('/\[?PERMANENTFLAGS\s+\(([^\)]+)\)\]/U', $line, $match)) {
 				    $this->permanentflags = explode(' ', $match[1]);
 			    }
 		    } while (!$this->startsWith($line, 'sel1', true, true));
 
-		    if (strcasecmp($a[1], 'OK') == 0) {
+            if ($this->parseResult($line) == 0) {
 			    $this->selected = $mailbox;
 			    return true;
 		    }
-            else {
-                $this->error = "Couldn't select $mailbox";
-            }
 	    }
 
+        $this->error = "Couldn't select $mailbox";
         return false;
     }
 
@@ -1265,7 +1258,7 @@
 					    	}
         					break;
 					    case 'in-reply-to':
-			    			$result[$id]->in_reply_to = preg_replace('/[\n<>]/', '', $string);
+			    			$result[$id]->in_reply_to = str_replace(array("\n", '<', '>'), '', $string);
 				    		break;
     					case 'references':
 	    					$result[$id]->references = $string;
@@ -1669,8 +1662,11 @@
             $command = 'LIST';
         }
 
+        $ref = $this->escape($ref);
+        $mailbox = $this->escape($mailbox);
+
     	// send command
-	    if (!$this->putLine($key." ".$command." \"". $this->escape($ref) ."\" \"". $this->escape($mailbox) ."\"")) {
+	    if (!$this->putLine($key." ".$command." \"". $ref ."\" \"". $mailbox ."\"")) {
 		    $this->error = "Couldn't send $command command";
 	        return false;
 	    }
@@ -1679,16 +1675,15 @@
 	    do {
 		    $line = $this->readLine(500);
 		    $line = $this->multLine($line, true);
-		    $a    = explode(' ', $line);
+		    $line = trim($line);
 
-		    if (($line[0] == '*') && ($a[1] == $command)) {
-			    $line = rtrim($line);
-        		// split one line
-			    $a = rcube_explode_quoted_string(' ', $line);
-        		// last string is folder name
-			    $folders[] = preg_replace(array('/^"/', '/"$/'), '', $this->unEscape($a[count($a)-1]));
-		        // second from last is delimiter
-        		$delim = trim($a[count($a)-2], '"');
+		    if (preg_match('/^\* '.$command.' \(([^\)]*)\) "*([^"]+)"* (.*)$/', $line, $m)) {
+        		// folder name
+   			    $folders[] = preg_replace(array('/^"/', '/"$/'), '', $this->unEscape($m[3]));
+		        // attributes
+//        		$attrib = explode(' ', $m[1]);
+		        // delimiter
+//        		$delim = $m[2];
 		    }
 	    } while (!$this->startsWith($line, $key, true));
 
@@ -2001,7 +1996,7 @@
 	    return false;
     }
 
-    function appendFromFile($folder, $path, $headers=null, $separator="\n\n")
+    function appendFromFile($folder, $path, $headers=null)
     {
 	    if (!$folder) {
 	        return false;
@@ -2017,14 +2012,16 @@
 		    return false;
 	    }
 
+        $body_separator = "\r\n\r\n";
 	    $len = filesize($path);
+
 	    if (!$len) {
 		    return false;
 	    }
 
         if ($headers) {
             $headers = preg_replace('/[\r\n]+$/', '', $headers);
-            $len += strlen($headers) + strlen($separator);
+            $len += strlen($headers) + strlen($body_separator);
         }
 
     	// send APPEND command
@@ -2040,7 +2037,7 @@
 
             // send headers with body separator
             if ($headers) {
-			    $this->putLine($headers . $separator, false);
+			    $this->putLine($headers . $body_separator, false);
             }
 
 		    // send file
@@ -2118,7 +2115,7 @@
 	    // return false if not found, parse if found
 	    $min_free = PHP_INT_MAX;
 	    foreach ($quota_lines as $key => $quota_line) {
-		    $quota_line   = preg_replace('/[()]/', '', $quota_line);
+		    $quota_line   = str_replace(array('(', ')'), '', $quota_line);
 		    $parts        = explode(' ', $quota_line);
 		    $storage_part = array_search('STORAGE', $parts);
 

--
Gitblit v1.9.1