diff options
author | Jon Trowbridge <trow@ximian.com> | 2001-05-19 01:09:31 +0800 |
---|---|---|
committer | Jon Trowbridge <trow@src.gnome.org> | 2001-05-19 01:09:31 +0800 |
commit | d4a2e9f382f325a9f1277aa8b1a5de50f10e3b36 (patch) | |
tree | 664d0ce5f326c072948c9ffb5892445c4d12b00a /addressbook/gui/component/select-names/e-select-names-completion.c | |
parent | 7cffbe65d1666776db06adc03178560bba9c5b42 (diff) | |
download | gsoc2013-evolution-d4a2e9f382f325a9f1277aa8b1a5de50f10e3b36.tar.gz gsoc2013-evolution-d4a2e9f382f325a9f1277aa8b1a5de50f10e3b36.tar.zst gsoc2013-evolution-d4a2e9f382f325a9f1277aa8b1a5de50f10e3b36.zip |
Do a better job constructing match strings, so we never try to use a
2001-05-18 Jon Trowbridge <trow@ximian.com>
* gui/component/select-names/e-select-names-completion.c
(match_name): Do a better job constructing match strings, so we
never try to use a segment of the name that isn't there (resulting
in ugly (null)'s in the string). Boost our score if some part of
the name also matches the front part of the e-mail address, so the
name match will always trump the e-mail match.
svn path=/trunk/; revision=9882
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names-completion.c')
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-completion.c | 62 |
1 files changed, 56 insertions, 6 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names-completion.c b/addressbook/gui/component/select-names/e-select-names-completion.c index 76b8fd0550..dbe54e8a6b 100644 --- a/addressbook/gui/component/select-names/e-select-names-completion.c +++ b/addressbook/gui/component/select-names/e-select-names-completion.c @@ -275,8 +275,10 @@ match_name (ESelectNamesCompletion *comp, EDestination *dest, double *score) { ECard *card; gchar *cpy, **strv; + const gchar *email; gint len, i, match_len = 0; gint match = 0, first_match = 0; + gboolean have_given, have_additional, have_family; card = e_destination_get_card (dest); @@ -293,6 +295,7 @@ match_name (ESelectNamesCompletion *comp, EDestination *dest, double *score) len = strlen (strv[i]); if (card->name->given + && *card->name->given && !(match & MATCHED_GIVEN_NAME) && match_name_fragment (card->name->given, strv[i])) { @@ -300,12 +303,14 @@ match_name (ESelectNamesCompletion *comp, EDestination *dest, double *score) } else if (card->name->additional + && *card->name->additional && !(match & MATCHED_ADDITIONAL_NAME) && match_name_fragment (card->name->additional, strv[i])) { this_match = MATCHED_ADDITIONAL_NAME; } else if (card->name->family + && *card->name->family && !(match & MATCHED_FAMILY_NAME) && match_name_fragment (card->name->family, strv[i])) { @@ -337,12 +342,57 @@ match_name (ESelectNamesCompletion *comp, EDestination *dest, double *score) *score *= 100; } - if (first_match == MATCHED_GIVEN_NAME) - return g_strdup_printf ("%s %s", card->name->given, card->name->family); - else if (first_match == MATCHED_ADDITIONAL_NAME) - return g_strdup_printf ("%s, %s %s", card->name->family, card->name->given, card->name->additional); - else if (first_match == MATCHED_FAMILY_NAME) - return g_strdup_printf ("%s, %s", card->name->family, card->name->given); + email = e_destination_get_email (dest); + if (email) { + /* Do the same for the email address. */ + gchar *at = strchr (email, '@'); + len = at ? at-email : strlen (email); + if ((card->name->given && !e_utf8_strncasecmp (card->name->given, email, MIN (strlen (card->name->given), len))) + || (card->name->family && !e_utf8_strncasecmp (card->name->family, email, MIN (strlen (card->name->family), len))) + || (card->name->additional && !e_utf8_strncasecmp (card->name->additional, email, MIN (strlen (card->name->additional), len)))) + *score *= 100; + } + + have_given = card->name->given && *card->name->given; + have_additional = card->name->additional && *card->name->additional; + have_family = card->name->family && *card->name->family; + + if (first_match == MATCHED_GIVEN_NAME) { + + if (have_family) + return g_strdup_printf ("%s %s", card->name->given, card->name->family); + else + return g_strdup_printf (card->name->given); + + } else if (first_match == MATCHED_ADDITIONAL_NAME) { + + if (have_family) { + + return g_strdup_printf ("%s, %s%s%s", + card->name->family, + have_given ? card->name->given : "", + have_given ? " " : "", + card->name->additional); + + } else { + + return g_strdup_printf ("%s%s%s", + have_given ? card->name->given : "", + have_given ? " " : "", + card->name->additional); + + } + + } else if (first_match == MATCHED_FAMILY_NAME) { + + if (have_given) + return g_strdup_printf ("%s, %s %s", + card->name->family, + card->name->given, + have_additional ? card->name->additional : ""); + else + return g_strdup_printf (card->name->family); + } return NULL; } |