From f255dd787c62b4910a5794ff1379cad80781e311 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sat, 22 Jun 2013 02:46:10 -0400
Subject: [PATCH] Fix error when searching in threaded mode

---
 program/lib/Roundcube/rcube_imap.php |   32 ++++++++++++++++++--------------
 1 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php
index d65f6af..5a80779 100644
--- a/program/lib/Roundcube/rcube_imap.php
+++ b/program/lib/Roundcube/rcube_imap.php
@@ -1206,29 +1206,33 @@
 
         // we have a saved search result, get index from there
         if ($this->search_string) {
-            if ($this->search_threads) {
-                $this->search($folder, $this->search_string, $this->search_charset, $this->sort_field);
-            }
-
-            // use message index sort as default sorting
-            if (!$this->sort_field || $this->search_sorted) {
-                if ($this->sort_field && $this->search_sort_field != $this->sort_field) {
-                    $this->search($folder, $this->search_string, $this->search_charset, $this->sort_field);
-                }
-                $index = $this->search_set;
-            }
-            else if (!$this->check_connection()) {
+            if ($this->search_set->is_empty()) {
                 return new rcube_result_index();
             }
+
+            // disable threading temporarily
+            $threading = $this->threading;
+            $this->threading = false;
+
+            if ($this->search_threads) {
+                $index = $this->search_index($folder, $this->search_string, $this->search_charset, $this->sort_field);
+            }
+            else if ((!$this->sort_field && !$this->search_sorted) ||
+                ($this->search_sorted && $this->search_sort_field == $this->sort_field)
+            ) {
+                $index = $this->search_set;
+            }
             else {
-                $index = $this->conn->index($folder, $this->search_set->get(),
-                    $this->sort_field, $this->options['skip_deleted'], true, true);
+                $search = 'UID ' . $this->search_set->get_compressed();
+                $index  = $this->search_index($folder, $search, $this->search_charset, $this->sort_field);
             }
 
             if ($this->sort_order != $index->get_parameters('ORDER')) {
                 $index->revert();
             }
 
+            $this->threading = $threading;
+
             return $index;
         }
 

--
Gitblit v1.9.1