aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/importer/GNOME_Evolution_Importer.idl4
-rw-r--r--shell/importer/Makefile.am7
-rw-r--r--shell/importer/evolution-importer-client.c124
-rw-r--r--shell/importer/evolution-importer-client.h11
-rw-r--r--shell/importer/evolution-importer-factory.c225
-rw-r--r--shell/importer/evolution-importer-factory.h77
-rw-r--r--shell/importer/evolution-importer.c74
-rw-r--r--shell/importer/evolution-importer.h17
-rw-r--r--shell/importer/importer.c73
9 files changed, 231 insertions, 381 deletions
diff --git a/shell/importer/GNOME_Evolution_Importer.idl b/shell/importer/GNOME_Evolution_Importer.idl
index 791891f81e..df6c7a22bf 100644
--- a/shell/importer/GNOME_Evolution_Importer.idl
+++ b/shell/importer/GNOME_Evolution_Importer.idl
@@ -61,9 +61,7 @@ module Evolution {
* Returns: A string.
*/
string getError ();
- };
- interface ImporterFactory : Bonobo::Unknown {
/**
* supportFormat:
* @filename: The filename of the file.
@@ -85,7 +83,7 @@ module Evolution {
*
* Returns: An Importer object.
*/
- Importer loadFile (in string filename);
+ boolean loadFile (in string filename);
};
};
};
diff --git a/shell/importer/Makefile.am b/shell/importer/Makefile.am
index 091367d473..64f293eedf 100644
--- a/shell/importer/Makefile.am
+++ b/shell/importer/Makefile.am
@@ -1,5 +1,6 @@
-INCLUDES = -I$(top_srcdir) -I$(includedir) $(GNOME_INCLUDEDIR) \
- -DG_LOG_DOMAIN=\"Evolution-Importer\" -g -Wall \
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/shell \
+ -I$(includedir) $(GNOME_INCLUDEDIR) \
+ -DG_LOG_DOMAIN=\"Evolution-Importer\" -g -Wall \
-Wmissing-prototypes -Wmissing-declarations \
-DEVOLUTION_GLADEDIR=\"$(datadir)/evolution/glade\"
@@ -26,14 +27,12 @@ idl_DATA = $(IDLS)
libevolution_importerincludedir = $(includedir)/evolution/importer
libevolution_importer_la_SOURCES = \
$(IDL_GENERATED) \
- evolution-importer-factory.c \
evolution-importer-client.c \
evolution-importer.c \
importer.c \
importer.h
libevolution_importerinclude_HEADERS = \
- evolution-importer-factory.h \
evolution-importer-client.h \
evolution-importer.h
diff --git a/shell/importer/evolution-importer-client.c b/shell/importer/evolution-importer-client.c
index 1687679cc4..da17cecbfd 100644
--- a/shell/importer/evolution-importer-client.c
+++ b/shell/importer/evolution-importer-client.c
@@ -1,5 +1,5 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-listener.c
+/* evolution-importer-client.c
*
* Copyright (C) 2000 Helix Code, Inc.
*
@@ -30,6 +30,8 @@
#include <bonobo/bonobo-main.h>
#include <gal/util/e-util.h>
+#include <liboaf/liboaf.h>
+
#include "GNOME_Evolution_Importer.h"
#include "evolution-importer-client.h"
@@ -254,7 +256,7 @@ init (EvolutionImporterClient *client)
client->private = priv;
}
-void
+static void
evolution_importer_client_construct (EvolutionImporterClient *client,
CORBA_Object corba_object)
{
@@ -265,6 +267,14 @@ evolution_importer_client_construct (EvolutionImporterClient *client,
bonobo_object_client_construct (BONOBO_OBJECT_CLIENT (client), corba_object);
}
+/**
+ * evolution_importer_client_new:
+ * @objref: The CORBA_Object to make a client for.
+ *
+ * Makes a client for @objref. @objref should be an Evolution_Importer.
+ *
+ * Returns: A newly created EvolutionImporterClient.
+ */
EvolutionImporterClient *
evolution_importer_client_new (const CORBA_Object objref)
{
@@ -278,7 +288,108 @@ evolution_importer_client_new (const CORBA_Object objref)
return client;
}
+/**
+ * evolution_importer_client_new_from_id:
+ * @id: The oafiid of the component to make a client for.
+ *
+ * Makes a client for the object returned by activating @id.
+ *
+ * Returns: A newly created EvolutionImporterClient.
+ */
+EvolutionImporterClient *
+evolution_importer_client_new_from_id (const char *id)
+{
+ CORBA_Environment ev;
+ CORBA_Object objref;
+
+ g_return_val_if_fail (id != NULL, NULL);
+
+ CORBA_exception_init (&ev);
+ objref = oaf_activate_from_id ((char *) id, 0, NULL, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ CORBA_exception_free (&ev);
+ g_warning ("Could not start %s.", id);
+ return NULL;
+ }
+
+ if (objref == CORBA_OBJECT_NIL) {
+ g_warning ("Could not activate component %s", id);
+ return NULL;
+ }
+
+ return evolution_importer_client_new (objref);
+}
+
/* API */
+/**
+ * evolution_importer_client_support_format:
+ * @client: The EvolutionImporterClient.
+ * @filename: Name of the file to check.
+ *
+ * Checks whether @client is able to import @filename.
+ *
+ * Returns: TRUE if @client can import @filename, FALSE otherwise.
+ */
+gboolean
+evolution_importer_client_support_format (EvolutionImporterClient *client,
+ const char *filename)
+{
+ GNOME_Evolution_Importer corba_importer;
+ gboolean result;
+ CORBA_Environment ev;
+
+ g_return_val_if_fail (client != NULL, FALSE);
+ g_return_val_if_fail (EVOLUTION_IS_IMPORTER_CLIENT (client), FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
+
+ CORBA_exception_init (&ev);
+ corba_importer = bonobo_object_corba_objref (BONOBO_OBJECT (client));
+ result = GNOME_Evolution_Importer_supportFormat (corba_importer,
+ filename, &ev);
+ CORBA_exception_free (&ev);
+
+ return result;
+}
+
+/**
+ * evolution_importer_client_load_file:
+ * @client: The EvolutionImporterClient.
+ * @filename: The file to load.
+ *
+ * Loads and initialises the importer.
+ *
+ * Returns: TRUE on sucess, FALSE on failure.
+ */
+gboolean
+evolution_importer_client_load_file (EvolutionImporterClient *client,
+ const char *filename)
+{
+ GNOME_Evolution_Importer corba_importer;
+ gboolean result;
+ CORBA_Environment ev;
+
+ g_return_val_if_fail (client != NULL, FALSE);
+ g_return_val_if_fail (EVOLUTION_IS_IMPORTER_CLIENT (client), FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
+
+ CORBA_exception_init (&ev);
+ corba_importer = bonobo_object_corba_objref (BONOBO_OBJECT (client));
+ result = GNOME_Evolution_Importer_loadFile (corba_importer,
+ filename, &ev);
+ CORBA_exception_free (&ev);
+
+ return result;
+}
+
+/**
+ * evolution_importer_client_process_item:
+ * @client: The EvolutionImporterClient.
+ * @callback: The function to be called once the item has been processed.
+ * @closure: The data to be passed to this function.
+ *
+ * Starts importing the next item in the file and calls @callback when the
+ * item has finished importing.
+ */
void
evolution_importer_client_process_item (EvolutionImporterClient *client,
EvolutionImporterClientCallback callback,
@@ -312,6 +423,15 @@ evolution_importer_client_process_item (EvolutionImporterClient *client,
CORBA_exception_free (&ev);
}
+/**
+ * evolution_importer_client_get_error:
+ * @client: The EvolutionImporterClient.
+ *
+ * Gets the error as a string.
+ *
+ * Returns: The error as a string. If there is no error NULL is returned.
+ * Importers need not support this method and if so, NULL is also returned.
+ */
const char *
evolution_importer_client_get_error (EvolutionImporterClient *client)
{
diff --git a/shell/importer/evolution-importer-client.h b/shell/importer/evolution-importer-client.h
index 3e81d8a9ba..e122a7cfdd 100644
--- a/shell/importer/evolution-importer-client.h
+++ b/shell/importer/evolution-importer-client.h
@@ -25,8 +25,7 @@
#define EVOLUTION_IMPORTER_CLIENT_H
#include <bonobo/bonobo-object-client.h>
-
-#include "evolution-importer.h"
+#include <importer/evolution-importer.h>
#ifdef __cplusplus
extern "C" {
@@ -60,10 +59,14 @@ typedef void (* EvolutionImporterClientCallback) (EvolutionImporterClient *clien
void *data);
GtkType evolution_importer_client_get_type (void);
-void evolution_importer_client_construct (EvolutionImporterClient *client,
- CORBA_Object corba_object);
+
EvolutionImporterClient *evolution_importer_client_new (const CORBA_Object objref);
+EvolutionImporterClient *evolution_importer_client_new_from_id (const char *id);
+gboolean evolution_importer_client_support_format (EvolutionImporterClient *client,
+ const char *filename);
+gboolean evolution_importer_client_load_file (EvolutionImporterClient *client,
+ const char *filename);
void evolution_importer_client_process_item (EvolutionImporterClient *client,
EvolutionImporterClientCallback callback,
void *closure);
diff --git a/shell/importer/evolution-importer-factory.c b/shell/importer/evolution-importer-factory.c
deleted file mode 100644
index b31c308571..0000000000
--- a/shell/importer/evolution-importer-factory.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-factory.c
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@helixcode.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <bonobo/bonobo-object.h>
-#include <gal/util/e-util.h>
-
-#include "GNOME_Evolution_Importer.h"
-#include "evolution-importer-factory.h"
-
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionImporterFactoryPrivate {
- EvolutionImporterFactorySupportFormatFn support_format_fn;
- EvolutionImporterFactoryLoadFileFn load_file_fn;
-
- void *closure;
-};
-
-
-static POA_GNOME_Evolution_ImporterFactory__vepv ImporterFactory_vepv;
-
-static POA_GNOME_Evolution_ImporterFactory *
-create_servant (void)
-{
- POA_GNOME_Evolution_ImporterFactory *servant;
- CORBA_Environment ev;
-
- servant = (POA_GNOME_Evolution_ImporterFactory *) g_new0 (BonoboObjectServant, 1);
- servant->vepv = &ImporterFactory_vepv;
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_ImporterFactory__init ((PortableServer_Servant) servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (servant);
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- CORBA_exception_free (&ev);
-
- return servant;
-}
-
-static CORBA_boolean
-impl_GNOME_Evolution_ImporterFactory_supportFormat (PortableServer_Servant servant,
- const CORBA_char *filename,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionImporterFactory *factory;
- EvolutionImporterFactoryPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- factory = EVOLUTION_IMPORTER_FACTORY (bonobo_object);
- priv = factory->private;
-
- if (priv->support_format_fn != NULL)
- return (priv->support_format_fn) (factory, filename, priv->closure);
- else
- return FALSE;
-}
-
-static GNOME_Evolution_Importer
-impl_GNOME_Evolution_ImporterFactory_loadFile (PortableServer_Servant servant,
- const CORBA_char *filename,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionImporterFactory *factory;
- EvolutionImporterFactoryPrivate *priv;
- EvolutionImporter *importer;
- GNOME_Evolution_Importer obj, obj_dup;
-
- bonobo_object = bonobo_object_from_servant (servant);
- factory = EVOLUTION_IMPORTER_FACTORY (bonobo_object);
- priv = factory->private;
-
- if (priv->load_file_fn != NULL) {
- importer = (priv->load_file_fn) (factory, filename, priv->closure);
- obj = bonobo_object_corba_objref (BONOBO_OBJECT (importer));
- obj_dup = CORBA_Object_duplicate (obj, ev);
- return obj_dup;
- } else {
- return CORBA_OBJECT_NIL;
- }
-}
-
-static void
-destroy (GtkObject *object)
-{
- EvolutionImporterFactory *factory;
- EvolutionImporterFactoryPrivate *priv;
-
- factory = EVOLUTION_IMPORTER_FACTORY (object);
- priv = factory->private;
-
- if (priv == NULL)
- return;
-
- g_free (priv);
- factory->private = NULL;
-
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_ImporterFactory__vepv *vepv;
- POA_GNOME_Evolution_ImporterFactory__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_ImporterFactory__epv, 1);
- epv->supportFormat = impl_GNOME_Evolution_ImporterFactory_supportFormat;
- epv->loadFile = impl_GNOME_Evolution_ImporterFactory_loadFile;
-
- vepv = &ImporterFactory_vepv;
- vepv->_base_epv = base_epv;
- vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
- vepv->GNOME_Evolution_ImporterFactory_epv = epv;
-}
-
-static void
-class_init (EvolutionImporterFactoryClass *klass)
-{
- GtkObjectClass *object_class;
-
- object_class = GTK_OBJECT_CLASS (klass);
- object_class->destroy = destroy;
-
- parent_class = gtk_type_class (PARENT_TYPE);
- corba_class_init ();
-}
-
-static void
-init (EvolutionImporterFactory *factory)
-{
- EvolutionImporterFactoryPrivate *priv;
-
- priv = g_new0 (EvolutionImporterFactoryPrivate, 1);
-
- factory->private = priv;
-}
-
-
-void
-evolution_importer_factory_construct (EvolutionImporterFactory *factory,
- GNOME_Evolution_ImporterFactory corba_object,
- EvolutionImporterFactorySupportFormatFn support_format_fn,
- EvolutionImporterFactoryLoadFileFn load_file_fn,
- void *closure)
-{
- EvolutionImporterFactoryPrivate *priv;
-
- g_return_if_fail (factory != NULL);
- g_return_if_fail (EVOLUTION_IS_IMPORTER_FACTORY (factory));
- g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
- g_return_if_fail (support_format_fn != NULL);
- g_return_if_fail (load_file_fn != NULL);
-
- bonobo_object_construct (BONOBO_OBJECT (factory), corba_object);
-
- priv = factory->private;
- priv->support_format_fn = support_format_fn;
- priv->load_file_fn = load_file_fn;
-
- priv->closure = closure;
-}
-
-EvolutionImporterFactory *
-evolution_importer_factory_new (EvolutionImporterFactorySupportFormatFn support_format_fn,
- EvolutionImporterFactoryLoadFileFn load_file_fn,
- void *closure)
-{
- EvolutionImporterFactory *factory;
- POA_GNOME_Evolution_ImporterFactory *servant;
- GNOME_Evolution_ImporterFactory corba_object;
-
- servant = create_servant ();
- if (servant == NULL)
- return NULL;
-
- factory = gtk_type_new (evolution_importer_factory_get_type ());
- corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (factory),
- servant);
- evolution_importer_factory_construct (factory, corba_object,
- support_format_fn,
- load_file_fn, closure);
- return factory;
-}
-
-E_MAKE_TYPE (evolution_importer_factory, "EvolutionImporterFactory",
- EvolutionImporterFactory, class_init, init, PARENT_TYPE);
diff --git a/shell/importer/evolution-importer-factory.h b/shell/importer/evolution-importer-factory.h
deleted file mode 100644
index bff0a23e8d..0000000000
--- a/shell/importer/evolution-importer-factory.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-factory.h
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@helixcode.com>
- */
-
-#ifndef EVOLUTION_IMPORTER_FACTORY_H
-#define EVOLUTION_IMPORTER_FACTORY_H
-
-#include <bonobo/bonobo-object.h>
-#include <evolution-importer.h>
-#include "GNOME_Evolution_Importer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_IMPORTER_FACTORY (evolution_importer_factory_get_type ())
-#define EVOLUTION_IMPORTER_FACTORY(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_IMPORTER_FACTORY, EvolutionImporterFactory))
-#define EVOLUTION_IMPORTER_FACTORY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_IMPORTER_FACTORY, EvolutionImporterFactoryClass))
-#define EVOLUTION_IS_IMPORTER_FACTORY(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_IMPORTER_FACTORY))
-#define EVOLUTION_IS_IMPORTER_FACTORY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_IMPORTER_FACTORY))
-
-typedef struct _EvolutionImporterFactory EvolutionImporterFactory;
-typedef struct _EvolutionImporterFactoryPrivate EvolutionImporterFactoryPrivate;
-typedef struct _EvolutionImporterFactoryClass EvolutionImporterFactoryClass;
-
-typedef gboolean (* EvolutionImporterFactorySupportFormatFn) (EvolutionImporterFactory *factory,
- const char *filename,
- void *closure);
-typedef EvolutionImporter *(* EvolutionImporterFactoryLoadFileFn) (EvolutionImporterFactory *factory,
- const char *filename,
- void *closure);
-struct _EvolutionImporterFactory {
- BonoboObject parent;
-
- EvolutionImporterFactoryPrivate *private;
-};
-
-struct _EvolutionImporterFactoryClass {
- BonoboObjectClass parent_class;
-};
-
-GtkType evolution_importer_factory_get_type (void);
-void evolution_importer_factory_construct (EvolutionImporterFactory *factory,
- CORBA_Object corba_object,
- EvolutionImporterFactorySupportFormatFn support_format_fn,
- EvolutionImporterFactoryLoadFileFn load_file_fn,
- void *closure);
-
-EvolutionImporterFactory *evolution_importer_factory_new (EvolutionImporterFactorySupportFormatFn support_format_fn,
- EvolutionImporterFactoryLoadFileFn load_file_fn,
- void *closure);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/shell/importer/evolution-importer.c b/shell/importer/evolution-importer.c
index 71b32de92e..85d2446a19 100644
--- a/shell/importer/evolution-importer.c
+++ b/shell/importer/evolution-importer.c
@@ -36,6 +36,8 @@
static BonoboObjectClass *parent_class = NULL;
struct _EvolutionImporterPrivate {
+ EvolutionImporterLoadFileFn load_file_fn;
+ EvolutionImporterSupportFormatFn support_format_fn;
EvolutionImporterProcessItemFn process_item_fn;
EvolutionImporterGetErrorFn get_error_fn;
@@ -67,6 +69,45 @@ create_servant (void)
return servant;
}
+static CORBA_boolean
+impl_GNOME_Evolution_Importer_supportFormat (PortableServer_Servant servant,
+ const CORBA_char *filename,
+ CORBA_Environment *ev)
+{
+ BonoboObject *bonobo_object;
+ EvolutionImporter *importer;
+ EvolutionImporterPrivate *priv;
+
+ bonobo_object = bonobo_object_from_servant (servant);
+ importer = EVOLUTION_IMPORTER (bonobo_object);
+ priv = importer->private;
+
+ if (priv->support_format_fn != NULL)
+ return (priv->support_format_fn) (importer, filename,
+ priv->closure);
+ else
+ return FALSE;
+}
+
+static CORBA_boolean
+impl_GNOME_Evolution_Importer_loadFile (PortableServer_Servant servant,
+ const CORBA_char *filename,
+ CORBA_Environment *ev)
+{
+ BonoboObject *bonobo_object;
+ EvolutionImporter *importer;
+ EvolutionImporterPrivate *priv;
+
+ bonobo_object = bonobo_object_from_servant (servant);
+ importer = EVOLUTION_IMPORTER (bonobo_object);
+ priv = importer->private;
+
+ if (priv->load_file_fn != NULL)
+ return (priv->load_file_fn) (importer, filename, priv->closure);
+ else
+ return FALSE;
+}
+
static void
impl_GNOME_Evolution_Importer_processItem (PortableServer_Servant servant,
GNOME_Evolution_ImporterListener listener,
@@ -136,6 +177,8 @@ corba_class_init (void)
base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
epv = g_new0 (POA_GNOME_Evolution_Importer__epv, 1);
+ epv->supportFormat = impl_GNOME_Evolution_Importer_supportFormat;
+ epv->loadFile = impl_GNOME_Evolution_Importer_loadFile;
epv->processItem = impl_GNOME_Evolution_Importer_processItem;
epv->getError = impl_GNOME_Evolution_Importer_getError;
@@ -169,9 +212,11 @@ init (EvolutionImporter *importer)
-void
+static void
evolution_importer_construct (EvolutionImporter *importer,
GNOME_Evolution_Importer corba_object,
+ EvolutionImporterSupportFormatFn support_format_fn,
+ EvolutionImporterLoadFileFn load_file_fn,
EvolutionImporterProcessItemFn process_item_fn,
EvolutionImporterGetErrorFn get_error_fn,
void *closure)
@@ -181,20 +226,38 @@ evolution_importer_construct (EvolutionImporter *importer,
g_return_if_fail (importer != NULL);
g_return_if_fail (EVOLUTION_IS_IMPORTER (importer));
g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
+ g_return_if_fail (support_format_fn != NULL);
+ g_return_if_fail (load_file_fn != NULL);
g_return_if_fail (process_item_fn != NULL);
- g_return_if_fail (get_error_fn != NULL);
bonobo_object_construct (BONOBO_OBJECT (importer), corba_object);
priv = importer->private;
+ priv->support_format_fn = support_format_fn;
+ priv->load_file_fn = load_file_fn;
priv->process_item_fn = process_item_fn;
priv->get_error_fn = get_error_fn;
priv->closure = closure;
}
+/**
+ * evolution_importer_new:
+ * @support_format_fn: The function to be called by the supportFormat method.
+ * @load_file_fn: The function to be called by the loadFile method.
+ * @process_item_fn: The function to be called by the processItem method.
+ * @get_error_fn: The function to be called by the getError method.
+ * @closure: The data to be passed to all of the above functions.
+ *
+ * Creates a new EvolutionImporter object. Of the parameters only
+ * @get_error_function and @closure may be #NULL.
+ *
+ * Returns: A newly created EvolutionImporter object.
+ */
EvolutionImporter *
-evolution_importer_new (EvolutionImporterProcessItemFn process_item_fn,
+evolution_importer_new (EvolutionImporterSupportFormatFn support_format_fn,
+ EvolutionImporterLoadFileFn load_file_fn,
+ EvolutionImporterProcessItemFn process_item_fn,
EvolutionImporterGetErrorFn get_error_fn,
void *closure)
{
@@ -209,8 +272,9 @@ evolution_importer_new (EvolutionImporterProcessItemFn process_item_fn,
importer = gtk_type_new (evolution_importer_get_type ());
corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (importer),
servant);
- evolution_importer_construct (importer, corba_object, process_item_fn,
- get_error_fn, closure);
+ evolution_importer_construct (importer, corba_object,
+ support_format_fn, load_file_fn,
+ process_item_fn, get_error_fn, closure);
return importer;
}
diff --git a/shell/importer/evolution-importer.h b/shell/importer/evolution-importer.h
index 07dd844955..6842438417 100644
--- a/shell/importer/evolution-importer.h
+++ b/shell/importer/evolution-importer.h
@@ -26,8 +26,6 @@
#include <bonobo/bonobo-object.h>
-#include "evolution-importer.h"
-
#ifdef __cplusplus
extern "C" {
#pragma }
@@ -44,6 +42,12 @@ typedef struct _EvolutionImporterPrivate EvolutionImporterPrivate;
typedef struct _EvolutionImporterClass EvolutionImporterClass;
typedef enum _EvolutionImporterResult EvolutionImporterResult;
+typedef gboolean (* EvolutionImporterSupportFormatFn) (EvolutionImporter *importer,
+ const char *filename,
+ void *closure);
+typedef gboolean (* EvolutionImporterLoadFileFn) (EvolutionImporter *importer,
+ const char *filename,
+ void *closure);
typedef void (* EvolutionImporterProcessItemFn) (EvolutionImporter *importer,
CORBA_Object listener,
void *closure,
@@ -74,13 +78,10 @@ struct _EvolutionImporterClass {
};
GtkType evolution_importer_get_type (void);
-void evolution_importer_construct (EvolutionImporter *importer,
- CORBA_Object corba_object,
- EvolutionImporterProcessItemFn process_item_fn,
- EvolutionImporterGetErrorFn get_error_fn,
- void *closure);
-EvolutionImporter *evolution_importer_new (EvolutionImporterProcessItemFn process_item_fn,
+EvolutionImporter *evolution_importer_new (EvolutionImporterSupportFormatFn support_format_fn,
+ EvolutionImporterLoadFileFn load_file_fn,
+ EvolutionImporterProcessItemFn process_item_fn,
EvolutionImporterGetErrorFn get_error_fn,
void *closure);
diff --git a/shell/importer/importer.c b/shell/importer/importer.c
index eb911f4672..7bbec3aa66 100644
--- a/shell/importer/importer.c
+++ b/shell/importer/importer.c
@@ -232,33 +232,31 @@ get_iid_for_filetype (const char *filename)
int i, len = 0;
CORBA_exception_init (&ev);
- info_list = oaf_query ("repo_ids.has ('IDL:GNOME/Evolution/ImporterFactory:1.0')", NULL, &ev);
+ info_list = oaf_query ("repo_ids.has ('IDL:GNOME/Evolution/Importer:1.0')", NULL, &ev);
for (i = 0; i < info_list->_length; i++) {
CORBA_Environment ev2;
- CORBA_Object factory;
+ CORBA_Object importer;
const OAF_ServerInfo *info;
- char *name = NULL;
info = info_list->_buffer + i;
CORBA_exception_init (&ev2);
- factory = oaf_activate_from_id ((char *) info->iid, 0, NULL, &ev2);
+ importer = oaf_activate_from_id ((char *) info->iid, 0, NULL, &ev2);
if (ev2._major != CORBA_NO_EXCEPTION) {
g_warning ("Error activating %s", info->iid);
CORBA_exception_free (&ev2);
continue;
}
- if (GNOME_Evolution_ImporterFactory_supportFormat (factory,
- filename,
- &ev2)) {
+ if (GNOME_Evolution_Importer_supportFormat (importer,
+ filename, &ev2)) {
can_handle = g_list_prepend (can_handle,
g_strdup (info->iid));
len++;
}
- bonobo_object_release_unref (factory, &ev2);
+ bonobo_object_release_unref (importer, &ev2);
CORBA_exception_free (&ev2);
}
@@ -269,6 +267,7 @@ get_iid_for_filetype (const char *filename)
} else if (len > 1) {
/* FIXME: Some way to choose between multiple iids */
/* FIXME: Free stuff */
+ g_warning ("Multiple iids can support");
ret_iid = can_handle->data;
g_list_free (can_handle);
return ret_iid;
@@ -281,10 +280,7 @@ static void
start_import (const char *filename,
const char *iid)
{
- CORBA_Object factory, importer;
- EvolutionImporterClient *client;
ImporterComponentData *icd;
- CORBA_Environment ev;
char *label;
char *real_iid;
@@ -303,9 +299,9 @@ start_import (const char *filename,
icd = g_new (ImporterComponentData, 1);
icd->stop = FALSE;
icd->destroyed = FALSE;
- icd->dialog = gnome_dialog_new (_("Importing"),
- GNOME_STOCK_BUTTON_CANCEL,
- NULL);
+ icd->dialog = GNOME_DIALOG (gnome_dialog_new (_("Importing"),
+ GNOME_STOCK_BUTTON_CANCEL,
+ NULL));
gtk_signal_connect (GTK_OBJECT (icd->dialog), "clicked",
GTK_SIGNAL_FUNC (dialog_clicked_cb), icd);
gtk_signal_connect (GTK_OBJECT (icd->dialog), "destroy",
@@ -322,49 +318,21 @@ start_import (const char *filename,
while (gtk_events_pending ())
gtk_main_iteration ();
- CORBA_exception_init (&ev);
- factory = oaf_activate_from_id ((char *) real_iid, 0, NULL, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- label = g_strdup_printf (_("Importing %s\n"
- "Cannot activate %s."),
- filename, real_iid);
- gtk_label_set_text (GTK_LABEL (icd->contents), label);
- g_free (label);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- g_free (icd);
- g_free (real_iid);
- return;
- }
-
- importer = GNOME_Evolution_ImporterFactory_loadFile (factory,
- filename,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_Environment ev2;
-
- label = g_strdup_printf (_("Unable to load %s.\n%s"),
- filename, CORBA_exception_id (&ev));
-
+ icd->client = evolution_importer_client_new_from_id (real_iid);
+ g_free (real_iid);
+
+ if (evolution_importer_client_load_file (icd->client, filename) == FALSE) {
+ label = g_strdup_printf (_("Error loading %s"), filename);
gtk_label_set_text (GTK_LABEL (icd->contents), label);
g_free (label);
while (gtk_events_pending ())
gtk_main_iteration ();
+ bonobo_object_unref (BONOBO_OBJECT (icd->client));
+ gtk_object_unref (GTK_OBJECT (icd->dialog));
g_free (icd);
- g_free (real_iid);
- CORBA_exception_init (&ev2);
- CORBA_Object_release (factory, &ev2);
- CORBA_exception_free (&ev2);
- return;
}
-
- CORBA_Object_release (factory, &ev);
- CORBA_exception_free (&ev);
-
- client = evolution_importer_client_new (importer);
- icd->client = client;
+
icd->filename = g_strdup (filename);
icd->item = 1;
@@ -375,8 +343,7 @@ start_import (const char *filename,
while (gtk_events_pending ())
gtk_main_iteration ();
- evolution_importer_client_process_item (client, import_cb, icd);
- g_free (real_iid);
+ evolution_importer_client_process_item (icd->client, import_cb, icd);
}
static void
@@ -445,7 +412,7 @@ create_plugin_menu (ImportData *data)
gtk_menu_append (GTK_MENU (menu), item);
CORBA_exception_init (&ev);
- info_list = oaf_query ("repo_ids.has ('IDL:GNOME/Evolution/ImporterFactory:1.0')", NULL, &ev);
+ info_list = oaf_query ("repo_ids.has ('IDL:GNOME/Evolution/Importer:1.0')", NULL, &ev);
for (i = 0; i < info_list->_length; i++) {
const OAF_ServerInfo *info;
char *name = NULL;