Build the GnomeCard importer

svn path=/trunk/; revision=9853
This commit is contained in:
Iain Holmes
2001-05-16 20:48:26 +00:00
parent ea3a7ec75e
commit 8e68e9ce08
4 changed files with 203 additions and 33 deletions

View File

@ -1,3 +1,12 @@
2001-05-16 Iain Holmes <iain@ximian.com>
* evolution-gnomecard-importer.c: Converted the old importer into an
intelligent importer that uses the VCard importer to do it's dirty work.
* Makefile.am: Create the gnomecard importer.
* GNOME_Evolution_GnomeCard_Intelligent_Importer.oaf.in: OAF file.
2001-05-14 Iain Holmes <iain@ximian.com>
* elm-importer.c (elm_store_settings): Store the elm settings.

View File

@ -0,0 +1,21 @@
<oaf_info>
<oaf_server iid="OAFIID:GNOME_Evolution_GnomeCard_Intelligent_ImporterFactory"
type="exe"
location="evolution-gnomecard-importer">
<oaf_attribute name="repo_ids" type="stringv">
<item value="IDL:GNOME/ObjectFactory:1.0"/>
</oaf_attribute>
</oaf_server>
<oaf_server iid="OAFIID:GNOME_Evolution_GnomeCard_Intelligent_Importer"
type="factory"
location="OAFIID:GNOME_Evolution_GnomeCard_Intelligent_ImporterFactory">
<oaf_attribute name="repo_ids" type="stringv">
<item value="IDL:GNOME/Evolution/IntelligentImporter:1.0"/>
</oaf_attribute>
</oaf_server>
</oaf_info>

View File

@ -1,6 +1,7 @@
bin_PROGRAMS = evolution-netscape-importer \
evolution-elm-importer \
evolution-pine-importer
evolution-pine-importer \
evolution-gnomecard-importer
INCLUDES = \
-DGNOMELOCALEDIR=\""$(localedir)"\" \
@ -55,10 +56,23 @@ evolution_pine_importer_LDADD = \
$(top_builddir)/libversit/libversit.la \
$(top_builddir)/shell/importer/libevolution-importer.la
evolution_gnomecard_importer_SOURCES = \
evolution-gnomecard-importer.c
evolution_gnomecard_importer_LDADD = \
$(BONOBO_GNOME_LIBS) \
$(EXTRA_GNOME_LIBS) \
$(top_builddir)/addressbook/backend/ebook/libebook.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/e-util/ename/libename.la \
$(top_builddir)/libversit/libversit.la \
$(top_builddir)/shell/importer/libevolution-importer.la
oafdir = $(datadir)/oaf
oaf_in_files = GNOME_Evolution_Netscape_Intelligent_Importer.oaf.in \
GNOME_Evolution_Elm_Intelligent_Importer.oaf.in \
GNOME_Evolution_Pine_Intelligent_Importer.oaf.in
GNOME_Evolution_Pine_Intelligent_Importer.oaf.in \
GNOME_Evolution_GnomeCard_Intelligent_Importer.oaf.in
oaf_DATA = $(oaf_in_files:.oaf.in=.oaf)

View File

@ -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 gboolean
gnomecard_can_import (EvolutionIntelligentImporter *ii,
void *closure)
static void
gnomecard_store_settings (GnomeCardImporter *importer)
{
char *evolution_dir;
char *gnomecard;
char *key;
gboolean result;
char *evolution_dir, *key;
evolution_dir = gnome_util_prepend_user_home ("evolution");
key = g_strdup_printf ("=%s/config/Importers=/importers/", evolution_dir);
key = g_strdup_printf ("=%s/config/Gnomecard-Importer=/settings/",
evolution_dir);
g_free (evolution_dir);
gnome_config_push_prefix (key);
g_free (key);
if (gnome_config_get_bool (KEY) == TRUE) {
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, address;
evolution_dir = gnome_util_prepend_user_home ("evolution");
key = g_strdup_printf ("=%s/config/Importers=/gnomecard-importers/", evolution_dir);
g_free (evolution_dir);
gnome_config_push_prefix (key);
g_free (key);
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;
return;
} else {
bonobo_object_unref (BONOBO_OBJECT (ii));
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 FALSE;
}
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");
CORBA_exception_free (&ev);
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);
}