diff options
author | Christopher James Lahey <clahey@helixcode.com> | 2000-07-29 23:04:56 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2000-07-29 23:04:56 +0800 |
commit | 94bc9ecd27c2fd9cf0c00adbca8b454ed767cf18 (patch) | |
tree | 433cc8725326f2a63460cb08b0fc2359c9514044 /addressbook | |
parent | 121d056d45b9766532ba9b7ec3f687c04582194f (diff) | |
download | gsoc2013-evolution-94bc9ecd27c2fd9cf0c00adbca8b454ed767cf18.tar.gz gsoc2013-evolution-94bc9ecd27c2fd9cf0c00adbca8b454ed767cf18.tar.zst gsoc2013-evolution-94bc9ecd27c2fd9cf0c00adbca8b454ed767cf18.zip |
Added load-gnomecard-addressbook compilation.
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.
svn path=/trunk/; revision=4414
Diffstat (limited to 'addressbook')
-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; +} |