]> git.deb.at Git - pkg/abook.git/blobdiff - filter.c
Imported Upstream version 0.6.0~pre2
[pkg/abook.git] / filter.c
index bda11accc1cf9e59afdca62f5b84e8b3e2e76d4a..f13d0995943dbbba872a5c70b5f924c302c28bb1 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -1,6 +1,6 @@
 
 /*
- * $Id: filter.c,v 1.53 2006/08/07 19:20:26 cduval Exp $
+ * $Id: filter.c,v 1.55 2006/09/06 02:46:44 cduval Exp $
  *
  * by JH <jheinonen@users.sourceforge.net>
  *
@@ -61,6 +61,7 @@ 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);
 static int     wl_export_database(FILE *out, struct db_enumerator e);
+static int     bsdcal_export_database(FILE *out, struct db_enumerator e);
 
 /*
  * end of function declarations
@@ -91,6 +92,7 @@ struct abook_output_filter e_filters[] = {
        { "text", N_("plain text"), text_export_database },
        { "wl", N_("Wanderlust address book"), wl_export_database },
        { "spruce", N_("Spruce address book"), spruce_export_database },
+       { "bsdcal", N_("BSD calendar"), bsdcal_export_database },
        { "\0", NULL, NULL }
 };
 
@@ -832,39 +834,56 @@ ldif_export_database(FILE *out, struct db_enumerator e)
  * html export filter
  */
 
-static void            html_export_write_head(FILE *out, int extra_column);
+static void            html_export_write_head(FILE *out);
 static void            html_export_write_tail(FILE *out);
 
+extern struct index_elem *index_elements;
+
+static void
+html_print_emails(FILE *out, struct list_field *f)
+{
+       abook_list *l = csv_to_abook_list(f->data);
+
+       for(; l; l = l->next) {
+               fprintf(out, "<a href=\"mailto:%s\">%s</a>", l->data, l->data);
+               if(l->next)
+                       fprintf(out, ", ");
+       }
+
+       abook_list_free(&l);
+}
+
 static int
 html_export_database(FILE *out, struct db_enumerator e)
 {
-       char tmp[MAX_EMAILSTR_LEN], *emails;
-       int extra_column;
+       struct list_field f;
+       struct index_elem *cur;
 
        if(list_is_empty())
                return 2;
 
-       extra_column = init_extra_field(STR_EXTRA_COLUMN);
-       html_export_write_head(out, extra_column);
+       init_index();
 
-       db_enumerate_items(e) {
-               get_first_email(tmp, e.item);
-               if (*tmp)
-                   fprintf(out, "<tr>\n<td>"
-                                   "<a href=\"mailto:%s\">%s</a>"
-                                   "</td>\n",
-                           tmp,
-                           db_name_get(e.item));
-               else
-                   fprintf(out, "<tr>\n<td>%s</td>\n", db_name_get(e.item));
+       html_export_write_head(out);
 
-               emails = db_email_get(e.item);
-               fprintf(out, "<td>%s</td>\n", emails);
-               free(emails);
-               if(extra_column >= 0)
-                       fprintf(out, "<td>%s</td>\n",
-                               safe_str(db_fget_byid(e.item, extra_column)));
-               fprintf(out, "</tr>\n\n");
+       db_enumerate_items(e) {
+               fprintf(out, "<tr>");
+               for(cur = index_elements; cur; cur = cur->next) {
+                       if(cur->type != INDEX_FIELD)
+                               continue;
+
+                       get_list_field(e.item, cur, &f);
+
+                       if(f.type == FIELD_EMAILS) {
+                               fprintf(out, "<td>");
+                               html_print_emails(out, &f);
+                               fprintf(out, "</td>");
+                               continue;
+                       } else {
+                               fprintf(out, "<td>%s</td>", safe_str(f.data));
+                       }
+               }
+               fprintf(out, "</tr>\n");
        }
 
        html_export_write_tail(out);
@@ -873,9 +892,10 @@ html_export_database(FILE *out, struct db_enumerator e)
 }
 
 static void
-html_export_write_head(FILE *out, int extra_column)
+html_export_write_head(FILE *out)
 {
-       char *realname = get_real_name(), *extra_column_name = NULL;
+       char *realname = get_real_name(), *str;
+       struct index_elem *cur;
 
        fprintf(out, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
        fprintf(out, "<html>\n<head>\n <title>%s's addressbook</title>",
@@ -884,11 +904,13 @@ html_export_write_head(FILE *out, int extra_column)
        fprintf(out, "\n<h2>%s's addressbook</h2>\n", realname );
        fprintf(out, "<br><br>\n\n");
 
-       fprintf(out, "<table border=\"1\" align=\"center\">\n");
-       fprintf(out, "\n<tr><th>Name</th><th>E-mail address(es)</th>");
-       if(extra_column >= 0) {
-               get_field_keyname(extra_column, NULL, &extra_column_name);
-               fprintf(out, "<th>%s</th>", safe_str(extra_column_name));
+       fprintf(out, "<table border=\"1\" align=\"center\">\n<tr>");
+       for(cur = index_elements; cur; cur = cur->next) {
+               if(cur->type != INDEX_FIELD)
+                       continue;
+
+               get_field_info(cur->d.field.id, NULL, &str, NULL);
+               fprintf(out, "<th>%s</th>", str);
        }
        fprintf(out, "</tr>\n\n");
 
@@ -1744,8 +1766,8 @@ text_export_database(FILE * out, struct db_enumerator e)
                        fprintf(out, "\n");
                        for(j = PHONE; j <= MOBILEPHONE; j++)
                                if(db_fget(e.item, j)) {
-                                       get_field_keyname(field_id(j),
-                                                       NULL, &str);
+                                       get_field_info(field_id(j),
+                                                       NULL, &str, NULL);
                                        fprintf(out, "%s: %s\n", str,
                                                db_fget(e.item, j));
                                }
@@ -1856,3 +1878,33 @@ wl_export_database(FILE *out, struct db_enumerator e)
  * end of wanderlust addressbook export filter
  */
 
+/*
+ * BSD calendar export filter
+ */
+
+static int
+bsdcal_export_database(FILE *out, struct db_enumerator e)
+{
+       db_enumerate_items(e) {
+               int year, month = 0, day = 0;
+               char *anniversary = db_fget(e.item, ANNIVERSARY);
+
+               if(anniversary) {
+                       parse_date_string(anniversary, &day, &month, &year);
+
+                       fprintf(out,
+                               _("%02d/%02d\tAnniversary of %s\n"),
+                               month,
+                               day,
+                               safe_str(db_name_get(e.item))
+                       );
+               }
+       }
+
+       return 0;
+}
+
+/*
+ * end of BSD calendar export filter
+ */
+