aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/backend')
-rw-r--r--addressbook/backend/ebook/e-card.c27
-rw-r--r--addressbook/backend/ebook/load-pine-addressbook.c147
-rw-r--r--addressbook/backend/pas/pas-backend-file.c3
3 files changed, 175 insertions, 2 deletions
diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c
index 2f0f05b97f..2eeec38b73 100644
--- a/addressbook/backend/ebook/e-card.c
+++ b/addressbook/backend/ebook/e-card.c
@@ -227,13 +227,15 @@ char
vobj = newVObject (VCCardProp);
- if ( card->file_as )
+ if ( card->file_as && *card->file_as )
addPropValue(vobj, "X-EVOLUTION-FILE-AS", card->file_as);
+ else if (card->file_as)
+ addProp(vobj, "X-EVOLUTION-FILE_AS");
if ( card->fname )
addPropValue(vobj, VCFullNameProp, card->fname);
- if ( card->name ) {
+ if ( card->name && (card->name->prefix || card->name->given || card->name->additional || card->name->family || card->name->suffix) ) {
VObject *nameprop;
nameprop = addProp(vobj, VCNameProp);
if ( card->name->prefix )
@@ -705,6 +707,27 @@ parse(ECard *card, VObject *vobj)
while(moreIteration (&iterator)) {
parse_attribute(card, nextVObject(&iterator));
}
+ if (!card->name) {
+ if (card->fname) {
+ card->name = e_card_name_from_string(card->fname);
+ }
+ }
+ if (!card->file_as) {
+ if (card->name) {
+ ECardName *name = card->name;
+ char *strings[3], **stringptr;
+ char *string;
+ stringptr = strings;
+ if (name->family && *name->family)
+ *(stringptr++) = name->family;
+ if (name->given && *name->given)
+ *(stringptr++) = name->given;
+ *stringptr = NULL;
+ string = g_strjoinv(", ", strings);
+ card->file_as = string;
+ } else
+ card->file_as = g_strdup("");
+ }
}
static void
diff --git a/addressbook/backend/ebook/load-pine-addressbook.c b/addressbook/backend/ebook/load-pine-addressbook.c
new file mode 100644
index 0000000000..8837a11a9a
--- /dev/null
+++ b/addressbook/backend/ebook/load-pine-addressbook.c
@@ -0,0 +1,147 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+#include <config.h>
+#include <bonobo.h>
+#include <gnome.h>
+#include <stdio.h>
+
+#include <e-book.h>
+
+static CORBA_Environment ev;
+
+#ifdef USING_OAF
+
+#include <liboaf/liboaf.h>
+
+static void
+init_corba (int *argc, char **argv)
+{
+ gnome_init_with_popt_table("blah", "0.0", *argc, argv, NULL, 0, NULL);
+
+ oaf_init (*argc, argv);
+}
+
+#else
+
+#include <libgnorba/gnorba.h>
+
+static void
+init_corba (int *argc, char **argv)
+{
+ gnome_CORBA_init_with_popt_table (
+ "blah", "0.0",
+ argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
+}
+
+#endif
+
+static void
+init_bonobo (int argc, char **argv)
+{
+ if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
+ g_error (_("Could not initialize Bonobo"));
+}
+
+static void
+add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure)
+{
+ ECard *card = E_CARD(closure);
+ char *vcard = e_card_get_vcard(card);
+ g_print ("Saved card: %s\n", vcard);
+ g_free(vcard);
+ gtk_object_unref(GTK_OBJECT(card));
+}
+
+static void
+book_open_cb (EBook *book, EBookStatus status, gpointer closure)
+{
+ FILE *fp = fopen (".addressbook", "r");
+ char line[1024];
+ while(fgets(line, 1024, fp)) {
+ int length = strlen(line);
+ char **strings;
+ ECardName *name;
+ ECard *card;
+ ECardList *list;
+ if (line[length - 1] == '\n')
+ line[--length] = 0;
+
+ card = e_card_new("");
+ strings = g_strsplit(line, "\t", 3);
+ name = e_card_name_from_string(strings[1]);
+ gtk_object_set(GTK_OBJECT(card),
+ "nickname", strings[0],
+ "full_name", strings[1],
+ "name", name,
+ NULL);
+ gtk_object_get(GTK_OBJECT(card),
+ "email", &list,
+ NULL);
+ e_card_list_append(list, strings[2]);
+ g_strfreev(strings);
+ e_book_add_card(book, card, add_card_cb, card);
+ }
+}
+
+static guint
+ebook_create (void)
+{
+ EBook *book;
+
+ book = e_book_new ();
+
+ if (!book) {
+ printf ("%s: %s(): Couldn't create EBook, bailing.\n",
+ __FILE__,
+ __FUNCTION__);
+ return FALSE;
+ }
+
+
+ if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) {
+ printf ("error calling load_uri!\n");
+ }
+
+
+ return FALSE;
+}
+
+#if 0
+static char *
+read_file (char *name)
+{
+ int len;
+ char buff[65536];
+ char line[1024];
+ FILE *f;
+
+ f = fopen (name, "r");
+ if (f == NULL)
+ g_error ("Unable to open %s!\n", name);
+
+ len = 0;
+ while (fgets (line, sizeof (line), f) != NULL) {
+ strcpy (buff + len, line);
+ len += strlen (line);
+ }
+
+ fclose (f);
+
+ return g_strdup (buff);
+}
+#endif
+
+int
+main (int argc, char **argv)
+{
+
+ CORBA_exception_init (&ev);
+
+ init_corba (&argc, argv);
+ init_bonobo (argc, argv);
+
+ gtk_idle_add ((GtkFunction) ebook_create, NULL);
+
+ bonobo_main ();
+
+ return 0;
+}
diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c
index cbe75a5aba..20de42808c 100644
--- a/addressbook/backend/pas/pas-backend-file.c
+++ b/addressbook/backend/pas/pas-backend-file.c
@@ -287,6 +287,9 @@ entry_compare(PASBackendFileSearchContext *ctx, struct _ESExp *f,
if (prop && compare(prop, argv[1]->value.string)) {
truth = TRUE;
}
+ if ((!prop) && compare("", argv[1]->value.string)) {
+ truth = TRUE;
+ }
}
else if (info->prop_type == PROP_TYPE_LIST) {
/* the special searches that match any of the list elements */