From d87a10196cd82a391f9c2f937ee91dd9f06e5abe Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Sun, 30 Apr 2000 17:03:06 +0000 Subject: From addressbook/ChangeLog 2000-04-30 Christopher James Lahey * backend/ebook/e-card.c: Make file as not have the : after it if it's empty. If there's no name, or file_as, fill in these fields with defaults based on full_name or name respectively. * backend/ebook/load-pine-addressbook.c: New file to do import of pine .addressbook files. * backend/pas/pas-backend-file.c: Made empty fields act as the empty string for searches. * contact-editor/e-contact-editor.c, contact-editor/e-contact-editor.h: Made the File As field update properly as you edit the name and company fields. Added the pull down list of File As choices. Made sure that all fields will be set to NULL if they are deleted to the empty string. * gui/minicard/e-minicard.c: Use the File As field instead of the Full Name field for the header. Make identical compares on the File As field do a compare on the uid. From wombat/ChangeLog 2000-04-30 Christopher James Lahey * Makefile.am: Added ename libs to LDADD. svn path=/trunk/; revision=2696 --- addressbook/backend/ebook/e-card.c | 27 +++- addressbook/backend/ebook/load-pine-addressbook.c | 147 ++++++++++++++++++++++ 2 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 addressbook/backend/ebook/load-pine-addressbook.c (limited to 'addressbook/backend/ebook') 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 +#include +#include +#include + +#include + +static CORBA_Environment ev; + +#ifdef USING_OAF + +#include + +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 + +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; +} -- cgit v1.2.3