]> git.deb.at Git - pkg/abook.git/blobdiff - filter.c
ldif: cleanup ldif_convert()
[pkg/abook.git] / filter.c
index 653f7af71520e17ef44afa83a39c9b1065cae482..520d4ceddd5b1f248505667274dec44503145c28 100644 (file)
--- a/filter.c
+++ b/filter.c
 #include "xmalloc.h"
 #include <assert.h>
 
+#ifdef HAVE_VFORMAT
+#include "vcard.h"
+#endif
+
 extern abook_field_list *fields_list;
 extern int fields_count;
 
@@ -73,7 +77,8 @@ static int    custom_export_database(FILE *out, struct db_enumerator e);
  */
 
 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
@@ -127,21 +132,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));
@@ -292,6 +297,18 @@ import_file(char filtname[FILTNAME_LEN], char *filename)
        if(i < 0)
                return -1;
 
+#ifdef HAVE_VFORMAT
+       // this is a special case for
+       // libvformat whose API expects a filename
+       if(!strcmp(filtname, "vcard")) {
+         if(!strcmp(filename, "-"))
+           ret = vcard_parse_file_libvformat("/dev/stdin");
+         else
+           ret = vcard_parse_file_libvformat(filename);
+       }
+       else
+#endif
+
        if(!strcmp(filename, "-")) {
                struct stat s;
                if((fstat(fileno(stdin), &s)) == -1 || S_ISDIR(s.st_mode))
@@ -613,16 +630,10 @@ ldif_convert(ldif_item item, char *type, char *value)
                return;
        }
 
-       for(i=0; i < LDIF_ITEM_FIELDS; i++) {
-               if(!safe_strcmp(ldif_field_names[i], type) && *value) {
-                       if(i == LDIF_ITEM_FIELDS - 1) /* this is a dirty hack */
-                               if(safe_strcmp("person", value))
-                                       break;
-
-                       if(item_fget(item, i))
-                               free(item_fget(item, i));
-
+       for(i=0; i < LDIF_ITEM_FIELDS - 1; i++) {
+                if(!strcasecmp(ldif_field_names[i], type) && *value) {
                        item_fput(item, i, xstrdup(value));
+                       break;
                }
        }
 }