From e38ad0fd13f913ea6d6d1c9c38aa112ac8eea01c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sergio=20Villar=20Sen=C3=ADn?= Date: Fri, 18 Dec 2009 18:42:50 +0100 Subject: [PATCH] Do not search into emails when more than 1 recipient is resolved Fixes NB#145849 --- src/hildon2/modest-address-book.c | 38 +++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/hildon2/modest-address-book.c b/src/hildon2/modest-address-book.c index cf4b6aa..8cb2e36 100644 --- a/src/hildon2/modest-address-book.c +++ b/src/hildon2/modest-address-book.c @@ -951,20 +951,23 @@ select_contacts_for_name_dialog (const gchar *name) GList *result = NULL; gchar *unquoted; EBookQuery *queries[10]; + gint i=0; unquoted = unquote_string (name); - queries[0] = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[1] = e_book_query_field_test (E_CONTACT_GIVEN_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[2] = e_book_query_field_test (E_CONTACT_FAMILY_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[3] = e_book_query_field_test (E_CONTACT_NICKNAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[4] = e_book_query_field_test (E_CONTACT_EMAIL_1, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[5] = e_book_query_field_test (E_CONTACT_EMAIL_2, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[6] = e_book_query_field_test (E_CONTACT_EMAIL_3, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[7] = e_book_query_field_test (E_CONTACT_EMAIL_4, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[8] = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_BEGINS_WITH, unquoted); - queries[9] = e_book_query_field_test (E_CONTACT_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); - book_query = e_book_query_or (10, queries, TRUE); + queries[i++] = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_GIVEN_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_FAMILY_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_NICKNAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); + if (strchr (name, '@')) { + queries[i++] = e_book_query_field_test (E_CONTACT_EMAIL_1, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_EMAIL_2, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_EMAIL_3, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_EMAIL_4, E_BOOK_QUERY_BEGINS_WITH, unquoted); + queries[i++] = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_BEGINS_WITH, unquoted); + } + queries[i] = e_book_query_field_test (E_CONTACT_NAME, E_BOOK_QUERY_BEGINS_WITH, unquoted); + book_query = e_book_query_or (i, queries, TRUE); e_book_get_book_view (book, book_query, NULL, -1, &book_view, NULL); e_book_query_unref (book_query); @@ -976,7 +979,7 @@ select_contacts_for_name_dialog (const gchar *name) /* TODO: figure out how to make the contact chooser modal */ contact_dialog = osso_abook_contact_chooser_new_with_capabilities (NULL, _AB("addr_ti_dia_select_contacts"), - OSSO_ABOOK_CAPS_EMAIL, + OSSO_ABOOK_CAPS_ALL, OSSO_ABOOK_CONTACT_ORDER_NAME); /* Enable multiselection */ osso_abook_contact_chooser_set_maximum_selection (OSSO_ABOOK_CONTACT_CHOOSER (contact_dialog), @@ -1000,21 +1003,24 @@ contact_name_or_email_starts_with (OssoABookContact *contact, gpointer user_data) { const char *prefix = user_data; - gboolean rv = FALSE; GList *contacts, *l; - + gboolean contact_match; contacts = osso_abook_contact_get_roster_contacts (contact); contacts = g_list_prepend (contacts, contact); for (l = contacts; l; l = l->next) { GList *attrs; + + contact_match = FALSE; + attrs = e_vcard_get_attributes (E_VCARD (l->data)); for (;attrs;attrs = attrs->next) { EVCardAttribute *attr = attrs->data; const char *name; name = e_vcard_attribute_get_name (attr); + if (!g_strcmp0 (name, "N") || (strchr (prefix, '@') && !g_strcmp0 (name, "EMAIL"))) { GList *values = e_vcard_attribute_get_values (attr); @@ -1027,7 +1033,7 @@ contact_name_or_email_starts_with (OssoABookContact *contact, value_down = g_utf8_strdown (values->data, -1); if (value_down && g_str_has_prefix (value_down, prefix_down)) { - rv = TRUE; + contact_match = TRUE; g_free (value_down); g_free (prefix_down); goto out; @@ -1041,7 +1047,7 @@ contact_name_or_email_starts_with (OssoABookContact *contact, out: g_list_free (contacts); - return rv; + return contact_match; } static gboolean -- 1.7.9.5