From 4b65801638f2d6b4cfefb9cc13966a7557e2f946 Mon Sep 17 00:00:00 2001 From: Not Zed Date: Wed, 9 Aug 2000 00:40:03 +0000 Subject: Reorder search result in summary order if we searched with a summary. 2000-08-09 Not Zed * camel-folder-search.c (camel_folder_search_execute_expression): Reorder search result in summary order if we searched with a summary. svn path=/trunk/; revision=4618 --- camel/ChangeLog | 6 ++++++ camel/camel-folder-search.c | 23 ++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) (limited to 'camel') diff --git a/camel/ChangeLog b/camel/ChangeLog index 55eae4be3b..fe2b2df415 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,9 @@ +2000-08-09 Not Zed + + * camel-folder-search.c (camel_folder_search_execute_expression): + Reorder search result in summary order if we searched with a + summary. + 2000-08-08 Dan Winship * camel-uid-cache.c: New code to keep an on-disk cache of what diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c index 4c5bd070d6..44eb03faad 100644 --- a/camel/camel-folder-search.c +++ b/camel/camel-folder-search.c @@ -256,6 +256,7 @@ camel_folder_search_execute_expression(CamelFolderSearch *search, const char *ex ESExpResult *r; GPtrArray *matches = g_ptr_array_new (); int i; + GHashTable *results; /* only re-parse if the search has changed */ if (search->last_search == NULL @@ -271,9 +272,25 @@ camel_folder_search_execute_expression(CamelFolderSearch *search, const char *ex if (r && r->type == ESEXP_RES_ARRAY_PTR) { d(printf("got result ...\n")); - for (i=0;ivalue.ptrarray->len;i++) { - d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i))); - g_ptr_array_add(matches, g_strdup(g_ptr_array_index(r->value.ptrarray, i))); + if (search->summary) { + /* reorder result in summary order */ + results = g_hash_table_new(g_str_hash, g_str_equal); + for (i=0;ivalue.ptrarray->len;i++) { + d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i))); + g_hash_table_insert(results, g_ptr_array_index(r->value.ptrarray, i), (void *)1); + } + for (i=0;isummary->len;i++) { + CamelMessageInfo *info = g_ptr_array_index(search->summary, i); + if (g_hash_table_lookup(results, info->uid)) { + g_ptr_array_add(matches, g_strdup(info->uid)); + } + } + g_hash_table_destroy(results); + } else { + for (i=0;ivalue.ptrarray->len;i++) { + d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i))); + g_ptr_array_add(matches, g_strdup(g_ptr_array_index(r->value.ptrarray, i))); + } } e_sexp_result_free(r); } else { -- cgit v1.2.3