X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=filter.c;h=1c96a8896ca974e115e0616a224eb2858b682e98;hb=7c88cafcd333277b6bfd55370a5ec1c5b76c2b0d;hp=a58868c5f8835352204a167cc4393dad7b2cc849;hpb=c6c64f87def0694eb80ecc10fde881a203e82fcf;p=pkg%2Fabook.git diff --git a/filter.c b/filter.c index a58868c..1c96a88 100644 --- a/filter.c +++ b/filter.c @@ -68,6 +68,14 @@ static int wl_export_database(FILE *out, struct db_enumerator e); static int bsdcal_export_database(FILE *out, struct db_enumerator e); static int custom_export_database(FILE *out, struct db_enumerator e); +/* + * export filter item prototypes + */ + +void vcard_export_item(FILE *out, int item); +void muttq_print_item(FILE *file, int item); +void custom_print_item(FILE *out, int item); + /* * end of function declarations */ @@ -100,11 +108,14 @@ struct abook_output_filter e_filters[] = { { "wl", N_("Wanderlust address book"), wl_export_database }, { "spruce", N_("Spruce address book"), spruce_export_database }, { "bsdcal", N_("BSD calendar"), bsdcal_export_database }, + { "custom", N_("Custom format"), custom_export_database }, { "\0", NULL, NULL } }; struct abook_output_item_filter u_filters[] = { + { "vcard", N_("vCard 2 file"), vcard_export_item }, { "muttq", N_("mutt alias"), muttq_print_item }, + { "custom", N_("Custom format"), custom_print_item }, { "\0", NULL } }; @@ -117,21 +128,21 @@ print_filters() { int i; - puts(_("input:")); + puts(_("input formats:")); for(i=0; *i_filters[i].filtname ; i++) printf("\t%s\t%s\n", i_filters[i].filtname, gettext(i_filters[i].desc)); putchar('\n'); - puts(_("output:")); + puts(_("output formats:")); for(i=0; *e_filters[i].filtname ; i++) printf("\t%s\t%s\n", e_filters[i].filtname, gettext(e_filters[i].desc)); putchar('\n'); - puts(_("output (with query):")); + puts(_("query-compatible output formats:")); for(i=0; *u_filters[i].filtname ; i++) printf("\t%s\t%s\n", u_filters[i].filtname, gettext(u_filters[i].desc)); @@ -1850,74 +1861,77 @@ palm_export_database(FILE *out, struct db_enumerator e) static int vcard_export_database(FILE *out, struct db_enumerator e) +{ + db_enumerate_items(e) + vcard_export_item(out, e.item); + return 0; +} + +void +vcard_export_item(FILE *out, int item) { int j; char *name, *tmp; abook_list *emails, *em; + fprintf(out, "BEGIN:VCARD\r\nFN:%s\r\n", + safe_str(db_name_get(item))); - db_enumerate_items(e) { - fprintf(out, "BEGIN:VCARD\r\nFN:%s\r\n", - safe_str(db_name_get(e.item))); - - name = get_surname(db_name_get(e.item)); - for( j = strlen(db_name_get(e.item)) - 1; j >= 0; j-- ) { - if((db_name_get(e.item))[j] == ' ') - break; - } - fprintf(out, "N:%s;%.*s\r\n", - safe_str(name), - j, - safe_str(db_name_get(e.item)) - ); - - free(name); - - if(db_fget(e.item, ADDRESS)) - fprintf(out, "ADR:;;%s;%s;%s;%s;%s;%s\r\n", - safe_str(db_fget(e.item, ADDRESS)), - safe_str(db_fget(e.item, ADDRESS2)), - safe_str(db_fget(e.item, CITY)), - safe_str(db_fget(e.item, STATE)), - safe_str(db_fget(e.item, ZIP)), - safe_str(db_fget(e.item, COUNTRY)) - ); - - if(db_fget(e.item, PHONE)) - fprintf(out, "TEL;HOME:%s\r\n", - db_fget(e.item, PHONE)); - if(db_fget(e.item, WORKPHONE)) - fprintf(out, "TEL;WORK:%s\r\n", - db_fget(e.item, WORKPHONE)); - if(db_fget(e.item, FAX)) - fprintf(out, "TEL;FAX:%s\r\n", - db_fget(e.item, FAX)); - if(db_fget(e.item, MOBILEPHONE)) - fprintf(out, "TEL;CELL:%s\r\n", - db_fget(e.item, MOBILEPHONE)); - - tmp = db_email_get(e.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); - - abook_list_free(&emails); - } - free(tmp); - - if(db_fget(e.item, NOTES)) - fprintf(out, "NOTE:%s\r\n", - db_fget(e.item, NOTES)); - if(db_fget(e.item, URL)) - fprintf(out, "URL:%s\r\n", - db_fget(e.item, URL)); + name = get_surname(db_name_get(item)); + for( j = strlen(db_name_get(item)) - 1; j >= 0; j-- ) { + if((db_name_get(item))[j] == ' ') + break; + } + fprintf(out, "N:%s;%.*s\r\n", + safe_str(name), + j, + safe_str(db_name_get(item)) + ); + + free(name); + + if(db_fget(item, ADDRESS)) + fprintf(out, "ADR:;;%s;%s;%s;%s;%s;%s\r\n", + safe_str(db_fget(item, ADDRESS)), + safe_str(db_fget(item, ADDRESS2)), + safe_str(db_fget(item, CITY)), + safe_str(db_fget(item, STATE)), + safe_str(db_fget(item, ZIP)), + safe_str(db_fget(item, COUNTRY)) + ); + + if(db_fget(item, PHONE)) + fprintf(out, "TEL;HOME:%s\r\n", + db_fget(item, PHONE)); + if(db_fget(item, WORKPHONE)) + fprintf(out, "TEL;WORK:%s\r\n", + db_fget(item, WORKPHONE)); + if(db_fget(item, FAX)) + fprintf(out, "TEL;FAX:%s\r\n", + db_fget(item, FAX)); + if(db_fget(item, MOBILEPHONE)) + fprintf(out, "TEL;CELL:%s\r\n", + db_fget(item, MOBILEPHONE)); + + 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); + + abook_list_free(&emails); + } + free(tmp); - fprintf(out, "END:VCARD\r\n\r\n"); + if(db_fget(item, NOTES)) + fprintf(out, "NOTE:%s\r\n", + db_fget(item, NOTES)); + if(db_fget(item, URL)) + fprintf(out, "URL:%s\r\n", + db_fget(item, URL)); - } + fprintf(out, "END:VCARD\r\n\r\n"); - return 0; } /*