aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/ebook/e-destination.c
diff options
context:
space:
mode:
authorJon Trowbridge <trow@ximian.com>2001-09-20 10:23:41 +0800
committerJon Trowbridge <trow@src.gnome.org>2001-09-20 10:23:41 +0800
commit9ae341104ad563c81b2a8d14db9ae3af74a2b803 (patch)
tree038aae4dbec8e89d73d7149ed111ff11aaa7df51 /addressbook/backend/ebook/e-destination.c
parent808bbced26ba3d2960c001725468849bba703f05 (diff)
downloadgsoc2013-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.c44
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,