[evolution-data-server] Bug #632527 - Unmatched vFolder returns incorrect uids on search
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug #632527 - Unmatched vFolder returns incorrect uids on search
- Date: Fri, 29 Oct 2010 11:59:53 +0000 (UTC)
commit b4478526a2c36ee09dc36655ccebc1890019cd34
Author: Milan Crha <mcrha redhat com>
Date: Fri Oct 29 13:59:27 2010 +0200
Bug #632527 - Unmatched vFolder returns incorrect uids on search
camel/camel-vee-folder.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
---
diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c
index 9f4cdc4..12a2ba2 100644
--- a/camel/camel-vee-folder.c
+++ b/camel/camel-vee-folder.c
@@ -997,11 +997,15 @@ vee_folder_search_by_expression (CamelFolder *folder,
CamelVeeFolderPrivate *p = CAMEL_VEE_FOLDER_GET_PRIVATE (vf);
GHashTable *searched = g_hash_table_new (NULL, NULL);
CamelVeeFolder *folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
+ gboolean is_folder_unmatched = vf == folder_unmatched && folder_unmatched;
+ GHashTable *folder_unmatched_hash = NULL;
- if (vf != folder_unmatched)
- expr = g_strdup_printf ("(and %s %s)", vf->expression ? vf->expression : "", expression);
- else
+ if (is_folder_unmatched) {
expr = g_strdup (expression);
+ folder_unmatched_hash = camel_folder_summary_get_hashtable (((CamelFolder *) folder_unmatched)->summary);
+ } else {
+ expr = g_strdup_printf ("(and %s %s)", vf->expression ? vf->expression : "", expression);
+ }
node = p->folders;
while (node) {
@@ -1020,7 +1024,9 @@ vee_folder_search_by_expression (CamelFolder *folder,
vuid = g_malloc (strlen (uid)+9);
memcpy (vuid, hash, 8);
strcpy (vuid+8, uid);
- g_ptr_array_add (result, (gpointer) camel_pstring_strdup (vuid));
+
+ if (!is_folder_unmatched || g_hash_table_lookup (folder_unmatched_hash, vuid) != NULL)
+ g_ptr_array_add (result, (gpointer) camel_pstring_strdup (vuid));
g_free (vuid);
}
camel_folder_search_free (f, matches);
@@ -1030,6 +1036,8 @@ vee_folder_search_by_expression (CamelFolder *folder,
node = g_list_next (node);
}
+ if (folder_unmatched_hash)
+ camel_folder_summary_free_hashtable (folder_unmatched_hash);
g_free (expr);
g_hash_table_destroy (searched);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]