From ac6b87c4a27c3ca7491af7f159778f333050519e Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Mon, 27 Mar 2006 14:07:13 -0500
Subject: [PATCH] Improved search function

---
 program/steps/mail/list.inc    |    2 +-
 program/steps/mail/search.inc  |   15 ++++++++-------
 program/js/app.js              |    2 +-
 program/include/rcube_imap.inc |    4 +---
 4 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index ebca1dd..f515b44 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -629,8 +629,6 @@
 
     $max = count($msgs);
     $start_msg = ($this->list_page-1) * $this->page_size;
-    
-    list($begin, $end) = $this->_get_message_range($max, $page);
 
     // fetch reuested headers from server
     $a_msg_headers = array();
@@ -644,7 +642,7 @@
     $a_msg_headers = iil_SortHeaders($a_msg_headers, $this->sort_field, $this->sort_order);
 
 	// only return the requested part of the set
-	return array_slice(array_values($a_msg_headers), $begin, min($max, $this->page_size));
+	return array_slice(array_values($a_msg_headers), $start_msg, min($max-$start_msg, $this->page_size));
     }
 
 
diff --git a/program/js/app.js b/program/js/app.js
index 81eaef3..d2bf41e 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -575,7 +575,7 @@
       case 'list':
         if (this.task=='mail')
           {
-          if (this.env.search_request && props != this.env.mailbox)
+          if (this.env.search_request<0 || (this.env.search_request && props != this.env.mailbox))
             this.reset_qsearch();
           this.list_mailbox(props);
           }
diff --git a/program/steps/mail/list.inc b/program/steps/mail/list.inc
index 40cd652..ba4169f 100644
--- a/program/steps/mail/list.inc
+++ b/program/steps/mail/list.inc
@@ -61,7 +61,7 @@
 $pages = ceil($count/$IMAP->page_size);
 $commands = sprintf("this.set_env('messagecount', %d);\n", $count);
 $commands .= sprintf("this.set_env('pagecount', %d);\n", $pages);
-$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
+$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text($count));
 
 // update mailboxlist
 $mbox = $IMAP->get_mailbox_name();
diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc
index 7b49ed8..1424114 100644
--- a/program/steps/mail/search.inc
+++ b/program/steps/mail/search.inc
@@ -21,6 +21,7 @@
 // get search string
 $str = get_input_value('_search', RCUBE_INPUT_GET);
 $mbox = get_input_value('_mbox', RCUBE_INPUT_GET);
+$search_request = md5($str);
 
 
 // Check the search string for type of search
@@ -60,7 +61,7 @@
 // Complete the search display results or report error
 function finish_search($mbox, $search)
   {
-  global $IMAP, $JS_OBJECT_NAME, $OUTPUT;
+  global $IMAP, $JS_OBJECT_NAME, $OUTPUT, $search_request;
   $commands = '';
   $count = 0;
     
@@ -70,28 +71,28 @@
     // Get the headers
     $result_h = $IMAP->list_header_set($mbox, $search, 1, $_SESSION['sort_col'], $_SESSION['sort_order']);
     $count = count($search);
-    
+
     // save search results in session
     if (!is_array($_SESSION['search']))
       $_SESSION['search'] = array();
-      
-    $search_request = md5(uniqid(rand()));
-    $_SESSION['search'][$search_request] = join(',', $search);
 
     // Make sure we got the headers
     if ($result_h != NULL)
       {
-      $count = count($result_h);
+      $_SESSION['search'][$search_request] = join(',', $search);
       $commands = rcmail_js_message_list($result_h);
       $commands .= show_message('searchsuccessful', 'confirmation', array('nr' => $count));
-      $commands .= sprintf("\nthis.set_env('search_request', '%s')\n", $search_request);
       }
     }
   else
+    {
     $commands = show_message('searchnomatch', 'warning');
+    $search_request = -1;
+    }
   
   // update message count display
   $pages = ceil($count/$IMAP->page_size);
+  $commands .= sprintf("\nthis.set_env('search_request', '%s')\n", $search_request);
   $commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
   $commands .= sprintf("this.set_env('pagecount', %d);\n", $pages);
   $commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text($count, 1));

--
Gitblit v1.9.1