]> git.deb.at Git - pkg/abook.git/blobdiff - filter.c
mutt-query (3/3): register the --mutt-query-format per-item filter and use it
[pkg/abook.git] / filter.c
index 184128017b9b4bdd8c4c6942be77535334f90ac6..2735331d1d5a110d09d79cdf61bf020606158795 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -60,6 +60,7 @@ static int    allcsv_export_database(FILE *out, struct db_enumerator e);
 static int     palm_export_database(FILE *out, struct db_enumerator e);
 static int     vcard_export_database(FILE *out, struct db_enumerator e);
 static int     mutt_alias_export(FILE *out, struct db_enumerator e);
+static int     mutt_query_export_database(FILE *out, struct db_enumerator e);
 static int     elm_alias_export(FILE *out, struct db_enumerator e);
 static int     text_export_database(FILE *out, struct db_enumerator e);
 static int     spruce_export_database(FILE *out, struct db_enumerator e);
@@ -87,6 +88,7 @@ struct abook_output_filter e_filters[] = {
        { "ldif", N_("ldif / Netscape addressbook (.4ld)"), ldif_export_database },
        { "vcard", N_("vCard 2 file"), vcard_export_database },
        { "mutt", N_("mutt alias"), mutt_alias_export },
+       { "muttq", N_("mutt query format (internal use)"), mutt_query_export_database },
        { "html", N_("html document"), html_export_database },
        { "pine", N_("pine addressbook"), pine_export_database },
        { "csv", N_("comma separated values"), csv_export_database },
@@ -100,6 +102,11 @@ struct abook_output_filter e_filters[] = {
        { "\0", NULL, NULL }
 };
 
+struct abook_output_item_filter u_filters[] = {
+       { "muttq", N_("mutt alias"), muttq_print_item },
+       { "\0", NULL }
+};
+
 /*
  * common functions
  */
@@ -122,6 +129,13 @@ print_filters()
                        gettext(e_filters[i].desc));
 
        putchar('\n');
+
+       puts(_("output (with query):"));
+       for(i=0; *u_filters[i].filtname ; i++)
+               printf("\t%s\t%s\n", u_filters[i].filtname,
+                       gettext(u_filters[i].desc));
+
+       putchar('\n');
 }
 
 static int
@@ -361,6 +375,25 @@ export_database()
        return 0;
 }
 
+struct abook_output_item_filter select_output_item_filter(char filtname[FILTNAME_LEN]) {
+       int i;
+       for(i=0;; i++) {
+               if(!strncasecmp(u_filters[i].filtname, filtname, FILTNAME_LEN))
+                 break;
+               if(!*u_filters[i].filtname) {
+                 i = -1;
+                 break;
+               }
+       }
+       return u_filters[i];
+}
+
+void
+e_write_item(FILE *out, int item, void (*func) (FILE *in, int item))
+{
+  (*func) (out, item);
+}
+
 static int
 e_write_file(char *filename, int (*func) (FILE *in, struct db_enumerator e),
                int mode)
@@ -2008,6 +2041,33 @@ mutt_alias_export(FILE *out, struct db_enumerator e)
        return 0;
 }
 
+void muttq_print_item(FILE *file, int item)
+{
+       abook_list *emails, *e;
+       char *tmp = db_email_get(item);
+
+       emails = csv_to_abook_list(tmp);
+       free(tmp);
+
+       for(e = emails; e; e = e->next) {
+               fprintf(file, "%s\t%s\t%s\n", e->data, db_name_get(item),
+                               !db_fget(item, NOTES) ?" " :db_fget(item, NOTES)
+                               );
+               if(!opt_get_bool(BOOL_MUTT_RETURN_ALL_EMAILS))
+                       break;
+       }
+       abook_list_free(&emails);
+}
+
+static int
+mutt_query_export_database(FILE *out, struct db_enumerator e)
+{
+  fprintf(out, "All items\n");
+  db_enumerate_items(e)
+    muttq_print_item(out, e.item);
+  return 0;
+}
+
 /*
  * end of mutt alias export filter
  */