X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=filter.c;h=e143ae4b0fabc8f864b7b83b1b8f85339f04a6ca;hb=ef09307370c849baecece089500b52b54d726397;hp=a0bc2e485f4a120f9b154d135691a5101768900f;hpb=64af20bd7059ff7f66fbc5ce22617340bda578d2;p=pkg%2Fabook.git diff --git a/filter.c b/filter.c index a0bc2e4..e143ae4 100644 --- a/filter.c +++ b/filter.c @@ -61,7 +61,7 @@ static int spruce_export_database(FILE *out, struct db_enumerator e); struct abook_input_filter i_filters[] = { { "abook", "abook native format", parse_database }, { "ldif", "ldif / Netscape addressbook", ldif_parse_file }, - { "mutt", "mutt alias (beta)", mutt_parse_file }, + { "mutt", "mutt alias", mutt_parse_file }, { "pine", "pine addressbook", pine_parse_file }, { "csv", "comma separated values", csv_parse_file }, { "\0", NULL, NULL } @@ -415,7 +415,7 @@ export(char filtname[FILTNAME_LEN], char *filename) static void ldif_fix_string(char *str); -#define LDIF_ITEM_FIELDS 15 +#define LDIF_ITEM_FIELDS 16 typedef char* ldif_item[LDIF_ITEM_FIELDS]; @@ -423,6 +423,7 @@ static ldif_item ldif_field_names = { "cn", "mail", "streetaddress", + "streetaddress2", "locality", "st", "postalcode", @@ -441,6 +442,7 @@ static int ldif_conv_table[LDIF_ITEM_FIELDS] = { NAME, /* "cn" */ EMAIL, /* "mail" */ ADDRESS, /* "streetaddress" */ + ADDRESS2, /* "streetaddress2" */ CITY, /* "locality" */ STATE, /* "st" */ ZIP, /* "postalcode" */ @@ -601,18 +603,12 @@ ldif_fix_string(char *str) * mutt alias import filter */ -enum { - MUTT_ALIAS, - MUTT_NAME, - MUTT_EMAIL -}; +#include "getname.h" static int mutt_read_line(FILE *in, char **alias, char **rest) { - char *line; - char *ptr; - char *tmp; + char *line, *ptr, *tmp; if( !(line = ptr = getaline(in)) ) return 1; /* error / EOF */ @@ -641,7 +637,7 @@ mutt_read_line(FILE *in, char **alias, char **rest) } strncpy(*alias, tmp, ptr-tmp); - *(*alias+(ptr-tmp)) = 0; + *(*alias + (ptr - tmp)) = 0; while( ISSPACE(*ptr) ) ptr++; @@ -653,76 +649,63 @@ mutt_read_line(FILE *in, char **alias, char **rest) } static void -mutt_parse_email(char *mutt_item[3]) +mutt_parse_email(list_item item) { - char *tmp; - int i; - - if( (tmp = strchr(mutt_item[MUTT_NAME], '<')) ) - *tmp = 0; - else - return; - - mutt_item[MUTT_EMAIL] = strdup(tmp+1); - - if( (tmp = strchr(mutt_item[MUTT_EMAIL], '>')) ) - *tmp = 0; - - tmp = mutt_item[MUTT_NAME]; - - for(i=strlen(tmp)-1; i>0; i--) - if(ISSPACE(tmp[i])) - tmp[i] = 0; - else - break; - - mutt_item[MUTT_NAME] = strdup(tmp); + char *line = item[NAME]; + char *start = line, *tmp; + char *name, *email; + int i = 0; + tmp = strconcat("From: ", line, NULL); + getname(tmp, &name, &email); free(tmp); -} - -static void -mutt_add_mutt_item(char *mutt_item[3]) -{ - list_item abook_item; - - memset(abook_item, 0, sizeof(abook_item)); - abook_item[NAME] = safe_strdup(mutt_item[MUTT_NAME]); - abook_item[EMAIL] = safe_strdup(mutt_item[MUTT_EMAIL]); - abook_item[NICK] = safe_strdup(mutt_item[MUTT_ALIAS]); - - add_item2database(abook_item); + if(name) + item[NAME] = name; + else + return; + if(email) + item[EMAIL] = email; + else + return; + + while( (start = strchr(start, ',')) && i++ < MAX_EMAILS - 1) { + tmp = strconcat("From: ", ++start, NULL); + getname(tmp, &name, &email); + free(tmp); + free(name); + if(email) { + if(*email) { + tmp = strconcat(item[EMAIL], ",", email, NULL); + free(item[EMAIL]); + item[EMAIL] = tmp; + } else { + my_free(email); + } + } + } } static int mutt_parse_file(FILE *in) { - char *mutt_item[3]; + list_item item; for(;;) { - - memset(mutt_item, 0, sizeof(mutt_item) ); + memset(item, 0, sizeof(item)); - if( !mutt_read_line(in, &mutt_item[MUTT_ALIAS], - &mutt_item[MUTT_NAME]) ) - mutt_parse_email(mutt_item); + if( !mutt_read_line(in, &item[NICK], + &item[NAME]) ) + mutt_parse_email(item); if( feof(in) ) { - free(mutt_item[MUTT_ALIAS]); - free(mutt_item[MUTT_NAME]); - free(mutt_item[MUTT_EMAIL]); + free_list_item(item); break; } - mutt_add_mutt_item(mutt_item); - - free(mutt_item[MUTT_ALIAS]); - free(mutt_item[MUTT_NAME]); - free(mutt_item[MUTT_EMAIL]); + add_item2database(item); } - return 0; } @@ -1241,8 +1224,9 @@ gcrd_export_database(FILE *out, struct db_enumerator e) free(name); if ( database[e.item][ADDRESS] ) - fprintf(out, "ADR:;;%s;%s;%s;%s;%s\n", + fprintf(out, "ADR:;;%s;%s;%s;%s;%s;%s\n", safe_str(database[e.item][ADDRESS]), + safe_str(database[e.item][ADDRESS2]), safe_str(database[e.item][CITY]), safe_str(database[e.item][STATE]), safe_str(database[e.item][ZIP]), @@ -1339,7 +1323,10 @@ mutt_alias_export(FILE *out, struct db_enumerator e) static void text_write_address_us(FILE *out, int i) { fprintf(out, "\n%s", database[i][ADDRESS]); - + + if (database[i][ADDRESS2]) + fprintf(out, "\n%s", database[i][ADDRESS2]); + if (database[i][CITY]) fprintf(out, "\n%s", database[i][CITY]); @@ -1373,7 +1360,10 @@ text_write_address_uk(FILE *out, int i) { static void text_write_address_eu(FILE *out, int i) { fprintf(out, "\n%s", database[i][ADDRESS]); - + + if (database[i][ADDRESS2]) + fprintf(out, "\n%s", database[i][ADDRESS2]); + if (database[i][ZIP] || database[i][CITY]) { fputc('\n', out);