aboutsummaryrefslogtreecommitdiffstats
path: root/importers/evolution-gnomecard-importer.c
diff options
context:
space:
mode:
Diffstat (limited to 'importers/evolution-gnomecard-importer.c')
-rw-r--r--importers/evolution-gnomecard-importer.c176
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);
}