diff options
-rw-r--r-- | addressbook/ChangeLog | 18 | ||||
-rw-r--r-- | addressbook/backend/ebook/Makefile.am | 17 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-card.c | 48 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-card.h | 2 | ||||
-rw-r--r-- | addressbook/backend/ebook/load-gnomecard-addressbook.c | 110 |
5 files changed, 162 insertions, 33 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index f339c28fb0..5fdac1455d 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,21 @@ +2000-07-29 Christopher James Lahey <clahey@helixcode.com> + + * backend/ebook/Makefile.am: Added load-gnomecard-addressbook + compilation. + + * backend/ebook/e-card.c, backend/ebook/e-card.h: Added + e_card_load_cards_from_file helper function to load multiple cards + from a single file. + + * backend/ebook/load-gnomecard-addressbook.c: New file to load + vcard files. I think this is the format that gnomecard uses so if + you copy your gnomecard file to gnomecard.vcf and then run this + program in the same directory, it'll copy all your gnome contacts + into evolution. It needs to be changed to take a filename as a + parameter. Some fields (phone and address information, for + example) aren't displayed properly, but are saved. This is new + code, so some other than phone and address may be lost. + 2000-07-28 Ettore Perazzoli <ettore@helixcode.com> * backend/pas/Makefile.am: Add `pas-backend-ldap.c' and diff --git a/addressbook/backend/ebook/Makefile.am b/addressbook/backend/ebook/Makefile.am index ed05a02fcd..12f35d0b94 100644 --- a/addressbook/backend/ebook/Makefile.am +++ b/addressbook/backend/ebook/Makefile.am @@ -1,4 +1,4 @@ -noinst_PROGRAMS = test-card test-client test-client-list load-pine-addressbook +noinst_PROGRAMS = test-card test-client test-client-list load-pine-addressbook load-gnomecard-addressbook CORBA_SOURCE = \ addressbook.h \ @@ -90,10 +90,21 @@ test_card_LDADD = \ $(top_builddir)/e-util/libeutil.la -load_pine_addressbook_SOURCES = \ +load_pine_addressbook_SOURCES = \ load-pine-addressbook.c -load_pine_addressbook_LDADD = \ +load_pine_addressbook_LDADD = \ + libebook.la \ + $(BONOBO_GNOME_LIBS) \ + $(top_builddir)/addressbook/ename/libename.la \ + $(top_builddir)/libversit/libversit.la \ + $(top_builddir)/e-util/libeutil.la + + +load_gnomecard_addressbook_SOURCES = \ + load-gnomecard-addressbook.c + +load_gnomecard_addressbook_LDADD = \ libebook.la \ $(BONOBO_GNOME_LIBS) \ $(top_builddir)/addressbook/ename/libename.la \ diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c index 8008e052ba..85ef7366d5 100644 --- a/addressbook/backend/ebook/e-card.c +++ b/addressbook/backend/ebook/e-card.c @@ -1689,6 +1689,24 @@ e_card_init (ECard *card) #endif } +GList * +e_card_load_cards_from_file(const char *filename) +{ + VObject *vobj = Parse_MIME_FromFileName(filename); + GList *list = NULL; + while(vobj) { + VObject *next; + ECard *card = E_CARD(gtk_type_new(e_card_get_type())); + parse(card, vobj); + next = nextVObjectInList(vobj); + cleanVObject(vobj); + vobj = next; + list = g_list_prepend(list, card); + } + list = g_list_reverse(list); + return list; +} + static void assign_string(VObject *vobj, char **string) { @@ -3114,36 +3132,6 @@ card_to_string (Card *crd) return ret; } - -char * -card_to_vobj_string (Card *crd) -{ - VObject *object; - char *data, *ret_val; - - g_assert (crd != NULL); - - object = card_convert_to_vobject (crd); - data = writeMemVObject (0, 0, object); - ret_val = g_strdup (data); - free (data); - - cleanVObject (object); - - return ret_val; -} - -void -card_save (Card *crd, FILE *fp) -{ - VObject *object; - - g_return_if_fail (crd != NULL); - - object = card_convert_to_vobject (crd); - writeVObject (fp, object); - cleanVObject (object); -} #endif static ECardDate diff --git a/addressbook/backend/ebook/e-card.h b/addressbook/backend/ebook/e-card.h index 5b122ad550..3992067a55 100644 --- a/addressbook/backend/ebook/e-card.h +++ b/addressbook/backend/ebook/e-card.h @@ -133,6 +133,8 @@ ECardArbitrary *e_card_arbitrary_new (void); ECardArbitrary *e_card_arbitrary_copy (const ECardArbitrary *arbitrary); void e_card_arbitrary_free ( ECardArbitrary *arbitrary); +GList *e_card_load_cards_from_file(const char *filename); + /* Standard Gtk function */ GtkType e_card_get_type (void); diff --git a/addressbook/backend/ebook/load-gnomecard-addressbook.c b/addressbook/backend/ebook/load-gnomecard-addressbook.c new file mode 100644 index 0000000000..f1f20bf50b --- /dev/null +++ b/addressbook/backend/ebook/load-gnomecard-addressbook.c @@ -0,0 +1,110 @@ +/* -*- 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) +{ + GList *list = e_card_load_cards_from_file("gnomecard.vcf"); + GList *iterator; + for (iterator = list; iterator; iterator = g_list_next(iterator)) { + ECard *card = iterator->data; + e_book_add_card(book, card, add_card_cb, card); + } + g_list_free(list); +} + +static guint +ebook_create (void) +{ + EBook *book; + gchar *path, *uri; + + book = e_book_new (); + + if (!book) { + printf ("%s: %s(): Couldn't create EBook, bailing.\n", + __FILE__, + __FUNCTION__); + return FALSE; + } + + + path = g_concat_dir_and_file (g_get_home_dir (), + "evolution/local/Contacts/addressbook.db"); + uri = g_strdup_printf ("file://%s", path); + g_free (path); + + if (! e_book_load_uri (book, uri, book_open_cb, NULL)) { + printf ("error calling load_uri!\n"); + } + g_free(uri); + + + return FALSE; +} + +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; +} |