X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=filter.c;h=20c89739623de515398e183a4873d247d0b36f0e;hb=d8a021c6625ec3a961ec35dc4f3275b3ffbd7ab9;hp=4d1abd893f018cdacc9e6e2e8c41852eb76889a1;hpb=2b6493a629d94386ed6e07b5c71482c66d3be4fe;p=pkg%2Fabook.git diff --git a/filter.c b/filter.c index 4d1abd8..20c8973 100644 --- a/filter.c +++ b/filter.c @@ -1538,7 +1538,7 @@ static char *vcard_fields[] = { "FN", /* FORMATTED NAME */ "EMAIL", /* EMAIL */ "ADR", /* ADDRESS */ - "ADR", /* ADDRESS2 - not used */ + "ADR", /* ADDRESS2 */ "ADR", /* CITY */ "ADR", /* STATE */ "ADR", /* ZIP */ @@ -1554,20 +1554,6 @@ static char *vcard_fields[] = { NULL /* not implemented: ANNIVERSARY, ITEM_FIELDS */ }; -/* - * mappings between vCard ADR field and abook's ADDRESS - * see rfc2426 section 3.2.1 - */ -static int vcard_address_fields[] = { - -1, /* vCard(post office box) - not used */ - -1, /* vCard(the extended address) - not used */ - 2, /* vCard(the street address) - ADDRESS */ - 4, /* vCard(the locality) - CITY */ - 5, /* vCard(the region) - STATE */ - 6, /* vCard(the postal code) - ZIP */ - 7 /* vCard(the country name) - COUNTRY */ -}; - enum { VCARD_KEY = 0, VCARD_KEY_ATTRIBUTE, @@ -1651,33 +1637,36 @@ vcard_parse_email(list_item item, char *line) } } + +/* + * mappings between vCard ADR field and abook's ADDRESS + * see rfc2426 section 3.2.1 + */ static void vcard_parse_address(list_item item, char *line) { - int i; - int k; char *value; - char *address_field; value = vcard_get_line_element(line, VCARD_VALUE); if(!value) return; - address_field = value; - for(i=k=0; value[i]; i++) { - if(value[i] == ';') { - value[i] = '\0'; - if(vcard_address_fields[k] >= 0) { - item[vcard_address_fields[k]] = xstrdup(address_field); - } - address_field = &value[i+1]; - k++; - if((k+1)==(sizeof(vcard_address_fields)/sizeof(*vcard_address_fields))) - break; - } - } - item[vcard_address_fields[k]] = xstrdup(address_field); - xfree(value); + // vCard(post office box) - not used + strsep(&value, ";"); + // vCard(the extended address) + item_fput(item, ADDRESS2, xstrdup(strsep(&value, ";"))); + // vCard(the street address) + item_fput(item, ADDRESS, xstrdup(strsep(&value, ";"))); + // vCard(the locality) + item_fput(item, CITY, xstrdup(strsep(&value, ";"))); + // vCard(the region) + item_fput(item, STATE, xstrdup(strsep(&value, ";"))); + // vCard(the postal code) + item_fput(item, ZIP, xstrdup(strsep(&value, ";"))); + // vCard(the country name) + item_fput(item, COUNTRY, xstrdup(strsep(&value, ";"))); + + if(*value) xfree(value); } static void @@ -2008,7 +1997,7 @@ vcard_export_database(FILE *out, struct db_enumerator e) void vcard_export_item(FILE *out, int item) { - int j; + int j, email_no; char *name, *tmp; abook_list *emails, *em; fprintf(out, "BEGIN:VCARD\r\nFN:%s\r\n", @@ -2056,9 +2045,10 @@ vcard_export_item(FILE *out, int item) tmp = db_email_get(item); if(*tmp) { emails = csv_to_abook_list(tmp); - - for(em = emails; em; em = em->next) - fprintf(out, "EMAIL;INTERNET:%s\r\n", em->data); + fprintf(out, "EMAIL;PREF;INTERNET:%s\r\n", emails->data); + email_no = 1; + for(em = emails->next; em; em = em->next, email_no++ ) + fprintf(out, "EMAIL;%d;INTERNET:%s\r\n", email_no, em->data); abook_list_free(&emails); }