diff options
author | Iain Holmes <iain@src.gnome.org> | 2001-05-17 04:48:26 +0800 |
---|---|---|
committer | Iain Holmes <iain@src.gnome.org> | 2001-05-17 04:48:26 +0800 |
commit | 8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6 (patch) | |
tree | 73489896819ead529505aa2ce0f5b5beb4bed2f5 /importers/evolution-gnomecard-importer.c | |
parent | ea3a7ec75e970dbc8da9714a57980f9ea98e281a (diff) | |
download | gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.tar gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.tar.gz gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.tar.bz2 gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.tar.lz gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.tar.xz gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.tar.zst gsoc2013-evolution-8e68e9ce0883f9615cc7bbceffb1f4ced6c793e6.zip |
Build the GnomeCard importer
svn path=/trunk/; revision=9853
Diffstat (limited to 'importers/evolution-gnomecard-importer.c')
-rw-r--r-- | importers/evolution-gnomecard-importer.c | 176 |
1 files changed, 151 insertions, 25 deletions
diff --git a/importers/evolution-gnomecard-importer.c b/importers/evolution-gnomecard-importer.c index 6d220d699a..13e7683647 100644 --- a/importers/evolution-gnomecard-importer.c +++ b/importers/evolution-gnomecard-importer.c @@ -30,42 +30,94 @@ #include <bonobo/bonobo-context.h> #include <bonobo/bonobo-generic-factory.h> #include <bonobo/bonobo-main.h> +#include <bonobo/bonobo-control.h> #include <e-book.h> #include <importer/evolution-intelligent-importer.h> #include <importer/GNOME_Evolution_Importer.h> +#include <importer/evolution-importer-listener.h> #define COMPONENT_FACTORY_IID "OAFIID:GNOME_Evolution_GnomeCard_Intelligent_ImporterFactory" +#define VCARD_IMPORTER_IID "OAFIID:GNOME_Evolution_Addressbook_VCard_Importer" -#define KEY "gnomecard-imported" typedef struct { GNOME_Evolution_Importer importer; EvolutionImporterListener *listener; + + GtkWidget *addresses; + gboolean do_addresses; + + GtkWidget *ask; + gboolean ask_again; } GnomeCardImporter; +static void +gnomecard_store_settings (GnomeCardImporter *importer) +{ + char *evolution_dir, *key; + + evolution_dir = gnome_util_prepend_user_home ("evolution"); + key = g_strdup_printf ("=%s/config/Gnomecard-Importer=/settings/", + evolution_dir); + g_free (evolution_dir); + + gnome_config_push_prefix (key); + g_free (key); + + gnome_config_set_bool ("address", importer->do_addresses); + + gnome_config_set_bool ("ask-again", importer->ask_again); + gnome_config_pop_prefix (); +} + +static void +gnomecard_restore_settings (GnomeCardImporter *importer) +{ + char *evolution_dir, *key; + + evolution_dir = gnome_util_prepend_user_home ("evolution"); + key = g_strdup_printf ("=%s/config/Gnomecard-Importer=/settings/", + evolution_dir); + g_free (evolution_dir); + + gnome_config_push_prefix (key); + g_free (key); + + importer->do_addresses = gnome_config_get_bool ("address=True"); + + importer->ask_again = gnome_config_get_bool ("ask-again=False"); + gnome_config_pop_prefix (); +} + static gboolean gnomecard_can_import (EvolutionIntelligentImporter *ii, void *closure) { + GnomeCardImporter *importer = closure; char *evolution_dir; char *gnomecard; char *key; - gboolean result; + gboolean result, address; evolution_dir = gnome_util_prepend_user_home ("evolution"); - key = g_strdup_printf ("=%s/config/Importers=/importers/", evolution_dir); + key = g_strdup_printf ("=%s/config/Importers=/gnomecard-importers/", evolution_dir); g_free (evolution_dir); gnome_config_push_prefix (key); g_free (key); - if (gnome_config_get_bool (KEY) == TRUE) { + address = gnome_config_get_bool ("address-imported"); + if (address == TRUE) { gnome_config_pop_prefix (); return FALSE; } gnome_config_pop_prefix (); + if (importer->ask_again == TRUE) { + return FALSE; + } + gnomecard = gnome_util_home_file ("GnomeCard.gcrd"); result = g_file_exists (gnomecard); g_free (gnomecard); @@ -94,10 +146,6 @@ importer_cb (EvolutionImporterListener *listener, gboolean more_items, void *data) { - GnomeCardImporter *gci = (GnomeCardImporter *) data; - CORBA_Object objref; - CORBA_Environment ev; - if (result == EVOLUTION_IMPORTER_NOT_READY || result == EVOLUTION_IMPORTER_BUSY) { gtk_timeout_add (5000, importer_timeout_fn, data); @@ -124,27 +172,98 @@ gnomecard_import (EvolutionIntelligentImporter *ii, gnomecard = gnome_util_home_file ("GnomeCard.gcrd"); - CORBA_exception_init (&ev); - result = GNOME_Evolution_Importer_loadFile (gci->importer, - gnomecard, NULL, &ev); - if (ev._major != CORBA_NO_EXCEPTION || result == FALSE) { - g_warning ("Exception here: %s", CORBA_exception_id (&ev)); - CORBA_Object_release (gci->importer, &ev); + /* Reference our object so when the shell release_unrefs us + we will still exist and not go byebye */ + bonobo_object_ref (BONOBO_OBJECT (ii)); + + gnomecard_store_settings (gci); + if (gci->do_addresses == TRUE) { + + CORBA_exception_init (&ev); + result = GNOME_Evolution_Importer_loadFile (gci->importer, + gnomecard, + "", &ev); + if (ev._major != CORBA_NO_EXCEPTION || result == FALSE) { + g_warning ("Exception here: %s", + CORBA_exception_id (&ev)); + CORBA_Object_release (gci->importer, &ev); + CORBA_exception_free (&ev); + return; + } + + gci->listener = evolution_importer_listener_new (importer_cb, + gci); + objref = bonobo_object_corba_objref (BONOBO_OBJECT (gci->listener)); + GNOME_Evolution_Importer_processItem (gci->importer, objref, &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + g_warning ("Exception: %s", CORBA_exception_id (&ev)); + return; + } + CORBA_exception_free (&ev); - return FALSE; - } - gci->listener = evolution_importer_listener_new (importer_cb, gci); - objref = bonobo_object_corba_objref (BONOBO_OBJECT (gci->listener)); - GNOME_Evolution_Importer_processItem (gci->importer, objref, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_warning ("Exception: %s", CORBA_exception_id (&ev)); - return FALSE; + return; + } else { + bonobo_object_unref (BONOBO_OBJECT (ii)); + return; } +} - CORBA_exception_free (&ev); +static void +gnomecard_destroy_cb (GtkObject *object, + GnomeCardImporter *importer) +{ + /* save the state of the checkboxes */ + g_print ("\n---------Settings-------\n"); + g_print ("Addressbook - %s\n", importer->do_addresses? "Yes" : "No"); + + gnomecard_store_settings (importer); + gtk_main_quit (); +} - return TRUE; +/* Fun with aggregation */ +static void +checkbox_toggle_cb (GtkToggleButton *tb, + gboolean *do_item) +{ + *do_item = gtk_toggle_button_get_active (tb); +} + +static BonoboControl * +create_checkboxes_control (GnomeCardImporter *importer) +{ + GtkWidget *container, *vbox, *sep; + BonoboControl *control; + + container = gtk_frame_new (_("Import")); + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (container), 2); + gtk_container_add (GTK_CONTAINER (container), vbox); + + importer->addresses = gtk_check_button_new_with_label (_("Addressbook")); + gtk_signal_connect (GTK_OBJECT (importer->addresses), "toggled", + GTK_SIGNAL_FUNC (checkbox_toggle_cb), + &importer->do_addresses); + + sep = gtk_hseparator_new (); + + importer->ask = gtk_check_button_new_with_label (_("Don't ask me again")); + gtk_signal_connect (GTK_OBJECT (importer->ask), "toggled", + GTK_SIGNAL_FUNC (checkbox_toggle_cb), + &importer->ask_again); + + gtk_box_pack_start (GTK_BOX (vbox), importer->addresses, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), sep, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), importer->ask, FALSE, FALSE, 0); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (importer->addresses), + importer->do_addresses); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (importer->ask), + importer->ask_again); + + gtk_widget_show_all (container); + control = bonobo_control_new (container); + return control; } static BonoboObject * @@ -155,8 +274,11 @@ factory_fn (BonoboGenericFactory *_factory, GnomeCardImporter *gci; char *message = N_("Evolution has found GnomeCard files.\n" "Would you like them to be imported into Evolution?"); + CORBA_Environment ev; + BonoboControl *control; gci = g_new (GnomeCardImporter, 1); + gnomecard_restore_settings (gci); CORBA_exception_init (&ev); gci->importer = oaf_activate_from_id (VCARD_IMPORTER_IID, 0, NULL, &ev); @@ -174,7 +296,11 @@ factory_fn (BonoboGenericFactory *_factory, _(message), gci); gtk_signal_connect (GTK_OBJECT (importer), "destroy", - GTK_SIGNAL_FUNC (importer_destroy_cb), gci); + GTK_SIGNAL_FUNC (gnomecard_destroy_cb), gci); + + control = create_checkboxes_control (gci); + bonobo_object_add_interface (BONOBO_OBJECT (importer), + BONOBO_OBJECT (control)); return BONOBO_OBJECT (importer); } |