diff options
author | Jon Trowbridge <trow@ximian.com> | 2001-09-20 10:23:41 +0800 |
---|---|---|
committer | Jon Trowbridge <trow@src.gnome.org> | 2001-09-20 10:23:41 +0800 |
commit | 9ae341104ad563c81b2a8d14db9ae3af74a2b803 (patch) | |
tree | 038aae4dbec8e89d73d7149ed111ff11aaa7df51 /addressbook/backend/ebook/e-destination.c | |
parent | 808bbced26ba3d2960c001725468849bba703f05 (diff) | |
download | gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.tar gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.tar.gz gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.tar.bz2 gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.tar.lz gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.tar.xz gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.tar.zst gsoc2013-evolution-9ae341104ad563c81b2a8d14db9ae3af74a2b803.zip |
Use the default e-mail address if we have nothing else to go on.
2001-09-19 Jon Trowbridge <trow@ximian.com>
* backend/ebook/e-destination.c (name_and_email_simple_query_cb):
Use the default e-mail address if we have nothing else to go on.
Previously we just failed, which basically meant that name-only
searches would never work properly.
(nickname_simple_query_cb): The logic was a bit tangled here; if
our query status isn't SUCCESS, always give up but don't leak the
destination. And if our nickname query fails and we try the
name-and-email query, use the textrep for a name-only search. The
only reason we are doing a nickname query in the first place is if
we have an obviously invalid e-mail.
(launch_cardify_query): Use e_destination_is_valid to determine
if we should try a nickname query first.
These changes basically fix bug 7728, and generally make the
auto-cardification of addresses a lot more clever and robust.
* backend/ebook/e-book-util.c (name_and_email_cb): Use
e_card_compare_name_to_string instead of e_card_name_match_string.
(e_book_name_and_email_query): The arguments to g_strsplit were
in the wrong order. Doh!
* backend/ebook/e-card-compare.c (e_card_compare_name_to_string):
Added. Replaces e_card_name_match_string, and actually works.
* backend/ebook/e-card.c: Removed e_card_name_match_string
function, which didn't work particularly well.
svn path=/trunk/; revision=13003
Diffstat (limited to 'addressbook/backend/ebook/e-destination.c')
-rw-r--r-- | addressbook/backend/ebook/e-destination.c | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/addressbook/backend/ebook/e-destination.c b/addressbook/backend/ebook/e-destination.c index f5564f37ae..c5287e5e6d 100644 --- a/addressbook/backend/ebook/e-destination.c +++ b/addressbook/backend/ebook/e-destination.c @@ -908,10 +908,15 @@ static void name_and_email_simple_query_cb (EBook *book, EBookSimpleQueryStatus status, const GList *cards, gpointer closure) { EDestination *dest = E_DESTINATION (closure); - + if (status == E_BOOK_SIMPLE_QUERY_STATUS_SUCCESS && g_list_length ((GList *) cards) == 1) { ECard *card = E_CARD (cards->data); - gint email_num = e_card_email_find_number (card, e_destination_get_email (dest)); + const gchar *email = e_destination_get_email (dest); + gint email_num = 0; + + if (e_destination_is_valid (dest) && email && *email) { + email_num = e_card_email_find_number (card, e_destination_get_email (dest)); + } if (email_num >= 0) { dest->priv->has_been_cardified = TRUE; @@ -933,27 +938,36 @@ nickname_simple_query_cb (EBook *book, EBookSimpleQueryStatus status, const GLis { EDestination *dest = E_DESTINATION (closure); - if (status == E_BOOK_SIMPLE_QUERY_STATUS_SUCCESS && g_list_length ((GList *) cards) == 1) { - dest->priv->has_been_cardified = TRUE; - e_destination_set_card (dest, E_CARD (cards->data), 0); /* Uses primary e-mail by default. */ - gtk_signal_emit (GTK_OBJECT (dest), e_destination_signals[CARDIFIED]); - - gtk_object_unref (GTK_OBJECT (dest)); /* drop the reference held by the query */ + if (status == E_BOOK_SIMPLE_QUERY_STATUS_SUCCESS) { + if (g_list_length ((GList *) cards) == 1) { + dest->priv->has_been_cardified = TRUE; + e_destination_set_card (dest, E_CARD (cards->data), 0); /* Uses primary e-mail by default. */ + gtk_signal_emit (GTK_OBJECT (dest), e_destination_signals[CARDIFIED]); + + gtk_object_unref (GTK_OBJECT (dest)); /* drop the reference held by the query */ + + } else { + + /* We can only end up here if we don't look at all like an e-mail address, so + we do a name-only query on the textrep */ + + e_book_name_and_email_query (book, + e_destination_get_textrep (dest), + NULL, + name_and_email_simple_query_cb, + dest); + } } else { - - e_book_name_and_email_query (book, - e_destination_get_name (dest), - e_destination_get_email (dest), - name_and_email_simple_query_cb, - dest); + /* Something went wrong with the query: drop our ref to the destination and return. */ + gtk_object_unref (GTK_OBJECT (dest)); } } static void launch_cardify_query (EDestination *dest) { - if (strchr (e_destination_get_textrep (dest), '@') == NULL) { + if (! e_destination_is_valid (dest)) { /* If it doesn't look like an e-mail address, see if it is a nickname. */ e_book_nickname_query (dest->priv->cardify_book, |