From 34f977f6dc01f2af3cadbbcecbdf4212eee2f392 Mon Sep 17 00:00:00 2001 From: Chris Toshok Date: Mon, 24 May 2004 17:35:49 +0000 Subject: [ fixes bug #40013 ] 2004-05-24 Chris Toshok [ fixes bug #40013 ] * importers/evolution-vcard-importer.c (process_item_fn): for TEL attribute that don't specify a location (HOME/WORK/OTHER), default to "OTHER". For TEL attributes that *only* specify a location, default to "VOICE". svn path=/trunk/; revision=26063 --- addressbook/importers/evolution-vcard-importer.c | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'addressbook/importers') diff --git a/addressbook/importers/evolution-vcard-importer.c b/addressbook/importers/evolution-vcard-importer.c index eedacef874..950eac9b7f 100644 --- a/addressbook/importers/evolution-vcard-importer.c +++ b/addressbook/importers/evolution-vcard-importer.c @@ -149,6 +149,57 @@ process_item_fn (EvolutionImporter *importer, } e_contact_set_attributes (contact, E_CONTACT_EMAIL, attrs); + /* + Deal with TEL attributes that don't conform to what we need. + + 1. if there's no location (HOME/WORK/OTHER), default to OTHER. + 2. if there's *only* a location specified, default to VOICE. + */ + attrs = e_vcard_get_attributes (E_VCARD (contact)); + for (attr = attrs; attr; attr = attr->next) { + EVCardAttribute *a = attr->data; + gboolean location_only = TRUE; + gboolean no_location = TRUE; + GList *params, *param; + + if (g_ascii_strcasecmp (e_vcard_attribute_get_name (a), + EVC_TEL)) + continue; + + params = e_vcard_attribute_get_params (a); + for (param = params; param; param = param->next) { + EVCardAttributeParam *p = param->data; + GList *vs, *v; + + if (g_ascii_strcasecmp (e_vcard_attribute_param_get_name (p), + EVC_TYPE)) + continue; + + vs = e_vcard_attribute_param_get_values (p); + for (v = vs; v; v = v->next) { + if (!g_ascii_strcasecmp ((char*)v->data, "WORK") || + !g_ascii_strcasecmp ((char*)v->data, "HOME") || + !g_ascii_strcasecmp ((char*)v->data, "OTHER")) + no_location = FALSE; + else + location_only = FALSE; + } + } + + if (location_only) { + /* add VOICE */ + e_vcard_attribute_add_param_with_value (a, + e_vcard_attribute_param_new (EVC_TYPE), + "VOICE"); + } + if (no_location) { + /* add OTHER */ + e_vcard_attribute_add_param_with_value (a, + e_vcard_attribute_param_new (EVC_TYPE), + "OTHER"); + } + } + /* Work around the fact that these fields no longer show up in the UI */ add_to_notes (contact, E_CONTACT_OFFICE); add_to_notes (contact, E_CONTACT_SPOUSE); -- cgit v1.2.3