diff options
| author | Thomas Bruederli <thomas@roundcube.net> | 2013-10-15 11:44:34 +0200 | 
|---|---|---|
| committer | Thomas Bruederli <thomas@roundcube.net> | 2014-01-16 11:33:57 +0100 | 
| commit | b6e24c6946606cd504d522451c36b6dc574fe75d (patch) | |
| tree | 47c14c635e1ed60ca73c5fabae0d85a3065bb032 /program/lib/Roundcube | |
| parent | 566747af00ae413c942a7c6702e24c044af36f17 (diff) | |
Minor improvements to threaded searching
Diffstat (limited to 'program/lib/Roundcube')
| -rw-r--r-- | program/lib/Roundcube/rcube_imap.php | 8 | ||||
| -rw-r--r-- | program/lib/Roundcube/rcube_imap_search.php | 36 | 
2 files changed, 26 insertions, 18 deletions
diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php index db94e7678..0cf34b2ca 100644 --- a/program/lib/Roundcube/rcube_imap.php +++ b/program/lib/Roundcube/rcube_imap.php @@ -969,7 +969,7 @@ class rcube_imap extends rcube_storage              $to    = $from + $page_size;              // sort headers -            if (!$this->threading) { +            if (!$this->threading && !empty($a_msg_headers)) {                  $a_msg_headers = $this->conn->sortHeaders($a_msg_headers, $this->sort_field, $this->sort_order);              } @@ -1476,10 +1476,8 @@ class rcube_imap extends rcube_storage              new rcube_result_index; // trigger autoloader and make these classes available for threaded context              new rcube_result_thread; -            // connect IMAP -            if (!defined('PTHREADS_INHERIT_ALL')) { -                $this->check_connection(); -            } +            // connect IMAP to have all the required classes and settings loaded +            $this->check_connection();              $searcher = new rcube_imap_search($this->options, $this->conn);              $results = $searcher->exec( diff --git a/program/lib/Roundcube/rcube_imap_search.php b/program/lib/Roundcube/rcube_imap_search.php index ed4face98..d82ec8a24 100644 --- a/program/lib/Roundcube/rcube_imap_search.php +++ b/program/lib/Roundcube/rcube_imap_search.php @@ -172,9 +172,9 @@ class rcube_imap_search_job extends Stackable      public function run()      { -        #trigger_error("Start search $this->folder", E_USER_NOTICE); +        // trigger_error("Start search $this->folder", E_USER_NOTICE);          $this->result = $this->search_index(); -        #trigger_error("End search $this->folder: " . $this->result->count(), E_USER_NOTICE); +        // trigger_error("End search $this->folder: " . $this->result->count(), E_USER_NOTICE);      }      /** @@ -182,6 +182,7 @@ class rcube_imap_search_job extends Stackable       */      protected function search_index()      { +        $pthreads = defined('PTHREADS_INHERIT_ALL');          $criteria = $this->search;          $charset = $this->charset; @@ -216,6 +217,10 @@ class rcube_imap_search_job extends Stackable                      rcube_imap::convert_criteria($criteria, $charset), true, 'US-ASCII');              } +            // close IMAP connection again +            if ($pthreads) +                $imap->closeConnection(); +              return $threads;          } @@ -228,21 +233,23 @@ class rcube_imap_search_job extends Stackable                  $messages = $imap->sort($this->folder, $this->sort_field,                      rcube_imap::convert_criteria($criteria, $charset), true, 'US-ASCII');              } - -            if (!$messages->is_error()) { -                return $messages; -            }          } -        $messages = $imap->search($this->folder, -            ($charset && $charset != 'US-ASCII' ? "CHARSET $charset " : '') . $criteria, true); - -        // Error, try with US-ASCII (some servers may support only US-ASCII) -        if ($messages->is_error() && $charset && $charset != 'US-ASCII') { +        if (!$messages || !$messages->is_error()) {              $messages = $imap->search($this->folder, -                rcube_imap::convert_criteria($criteria, $charset), true); +                ($charset && $charset != 'US-ASCII' ? "CHARSET $charset " : '') . $criteria, true); + +            // Error, try with US-ASCII (some servers may support only US-ASCII) +            if ($messages->is_error() && $charset && $charset != 'US-ASCII') { +                $messages = $imap->search($this->folder, +                    rcube_imap::convert_criteria($criteria, $charset), true); +            }          } +        // close IMAP connection again +        if ($pthreads) +            $imap->closeConnection(); +          return $messages;      } @@ -279,6 +286,8 @@ class rcube_imap_search_worker extends Worker       */      public function __construct($id, $options)      { +        $options['ident']['command'] = 'search-'.$id; +          $this->id = $id;          $this->options = $options;      } @@ -296,11 +305,12 @@ class rcube_imap_search_worker extends Worker          # $conn->setDebug(true, function($conn, $message){ trigger_error($message, E_USER_NOTICE); });          if ($this->options['user'] && $this->options['password']) { +            // TODO: do this synchronized to avoid warnings like "Only one Id allowed in non-authenticated state"              $conn->connect($this->options['host'], $this->options['user'], $this->options['password'], $this->options);          }          if ($conn->error) -            trigger_error($this->conn->error, E_USER_WARNING); +            trigger_error($conn->error, E_USER_WARNING);          #$this->conn = $conn;          return $conn;  | 
