aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-import.h
diff options
context:
space:
mode:
Diffstat (limited to 'e-util/e-import.h')
-rw-r--r--e-util/e-import.h262
1 files changed, 262 insertions, 0 deletions
diff --git a/e-util/e-import.h b/e-util/e-import.h
new file mode 100644
index 0000000000..e5bf9b393a
--- /dev/null
+++ b/e-util/e-import.h
@@ -0,0 +1,262 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Authors: Michel Zucchi <notzed@ximian.com>
+ *
+ * Copyright 2003 Ximian, Inc. (www.ximian.com)
+ *
+ * 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 Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __E_IMPORT_H__
+#define __E_IMPORT_H__
+
+#include <glib-object.h>
+#include "libedataserver/e-msgport.h"
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus */
+
+struct _GtkWindow;
+struct _GtkWidget;
+
+/* This is an importer function */
+
+typedef struct _EImport EImport;
+typedef struct _EImportClass EImportClass;
+
+typedef struct _EImportImporter EImportImporter;
+typedef struct _EImportFactory EImportFactory;
+typedef struct _EImportTarget EImportTarget;
+
+typedef void (*EImportCompleteFunc)(EImport *ei, void *data);
+
+typedef void (*EImportFactoryFunc)(EImport *ei, void *data);
+typedef void (*EImportImporterFunc)(EImportImporter *importer, void *data);
+typedef gboolean (*EImportSupportedFunc)(EImport *ei, EImportImporter *im, void *data);
+typedef struct _GtkWidget *(*EImportWidgetFunc)(EImport *ei, EImportImporter *im, void *data);
+typedef void (*EImportImportFunc)(EImport *ei, EImportImporter *im, void *data);
+
+/* The global target types, implementors may add additional ones */
+enum _e_import_target_t {
+ E_IMPORT_TARGET_URI, /* simple file */
+ E_IMPORT_TARGET_HOME, /* a home-directory thing, i.e. old applications */
+ E_IMPORT_TARGET_LAST = 256
+};
+
+/**
+ * struct _EImportImporter -
+ *
+ * @type: target type
+ * @priority: Priority of importer. Higher values will be processed first.
+ * @supported: Callback to see if this target is supported by the importer.
+ * @get_widget: A widget factory for this importer, if it needs any extra information in the druid. It will update the target.
+ * @import: Run the import.
+ * @user_data: User data for the callbacks;
+ *
+ * Base importer description.
+ **/
+struct _EImportImporter {
+ enum _e_import_target_t type;
+
+ int pri;
+
+ EImportSupportedFunc supported;
+ EImportWidgetFunc get_widget;
+ EImportImportFunc import;
+
+ void *user_data;
+
+ /* ?? */
+ char *name;
+ char *description;
+};
+
+/**
+ * struct _EImportTarget - importation context.
+ *
+ * @import: The parent object.
+ * @type: The type of target, defined by implementing classes.
+ *
+ * The base target object is used as the parent and placeholder for
+ * import context for a given importer.
+ **/
+struct _EImportTarget {
+ struct _EImport *import;
+
+ guint32 type;
+
+ /* implementation fields follow, depends on target type */
+};
+
+typedef struct _EImportTargetURI EImportTargetURI;
+typedef struct _EImportTargetHome EImportTargetHome;
+
+struct _EImportTargetURI {
+ struct _EImportTarget target;
+
+ char *uri_src;
+ char *uri_dest;
+};
+
+struct _EImportTargetHome {
+ struct _EImportTarget target;
+
+ char *homedir;
+};
+
+/**
+ * struct _EImport - An importer management object.
+ *
+ * @object: Superclass.
+ * @id: ID of importer.
+ * @target: The current target.
+ * @importer: The chosen importer for the target.
+ *
+ **/
+struct _EImport {
+ GObject object;
+
+ char *id;
+
+ EImportTarget *target;
+ EImportImporter *importer;
+
+ EImportCompleteFunc done;
+ void *done_data;
+};
+
+/**
+ * struct _EImportClass - Importer manager abstract class.
+ *
+ * @object_class: Superclass.
+ * @factories: A list of factories registered on this type of
+ * importuration manager.
+ * @set_target: A virtual method used to set the target on the
+ * importuration manager. This is used by subclasses so they may hook
+ * into changes on the target to propery drive the manager.
+ * @target_free: A virtual method used to free the target in an
+ * implementation-defined way.
+ *
+ **/
+struct _EImportClass {
+ GObjectClass object_class;
+
+ EDList importers;
+
+ void (*set_target)(EImport *ep, EImportTarget *t);
+ void (*target_free)(EImport *ep, EImportTarget *t);
+};
+
+GType e_import_get_type(void);
+
+/* Static class methods */
+void e_import_class_add_importer(EImportClass *klass, EImportImporter *importer, EImportImporterFunc freefunc, void *data);
+void e_import_class_remove_importer(EImportClass *klass, EImportImporter *f);
+
+GSList *e_import_get_importers(EImport *emp, EImportTarget *target);
+
+EImport *e_import_construct(EImport *, const char *id);
+void e_import_import(EImport *ei, EImportCompleteFunc done, void *data);
+
+struct _GtkWidget *e_import_get_widget(EImport *ei);
+
+void e_import_set_target(EImport *emp, EImportTarget *target);
+struct _GtkWidget *e_import_create_window(EImport *emp, struct _GtkWindow *parent, const char *title);
+void e_import_complete(EImport *);
+
+void *e_import_target_new(EImport *ep, int type, size_t size);
+void e_import_target_free(EImport *ep, void *o);
+
+EImportTargetURI *e_import_target_new_uri(EImport *ei, const char *suri, const char *duri);
+EImportTargetHome *e_import_target_new_home(EImport *ei, const char *home);
+
+/* ********************************************************************** */
+
+/* import plugin target, they are closely integrated */
+
+/* To implement a basic import plugin, you just need to subclass
+ this and initialise the class target type tables */
+
+#include "e-util/e-plugin.h"
+
+typedef struct _EPluginHookTargetMap EImportHookTargetMap;
+typedef struct _EPluginHookTargetKey EImportHookTargetMask;
+
+typedef struct _EImportHook EImportHook;
+typedef struct _EImportHookClass EImportHookClass;
+
+typedef struct _EImportHookImporter EImportHookImporter;
+
+struct _EImportHookImporter {
+ EImportImporter importer;
+
+ /* user_data == EImportHook */
+
+ char *supported;
+ char *get_widget;
+ char *import;
+};
+
+/**
+ * struct _EImportHook - Plugin hook for importuration windows.
+ *
+ * @hook: Superclass.
+ * @groups: A list of EImportHookGroup's of all importuration windows
+ * this plugin hooks into.
+ *
+ **/
+struct _EImportHook {
+ EPluginHook hook;
+
+ GSList *importers;
+};
+
+/**
+ * struct _EImportHookClass - Abstract class for importuration window
+ * plugin hooks.
+ *
+ * @hook_class: Superclass.
+ * @target_map: A table of EImportHookTargetMap structures describing
+ * the possible target types supported by this class.
+ * @import_class: The EImport derived class that this hook
+ * implementation drives.
+ *
+ * This is an abstract class defining the plugin hook point for
+ * importuration windows.
+ *
+ **/
+struct _EImportHookClass {
+ EPluginHookClass hook_class;
+
+ /* EImportHookTargetMap by .type */
+ GHashTable *target_map;
+ /* the import class these imports's belong to */
+ EImportClass *import_class;
+};
+
+GType e_import_hook_get_type(void);
+
+/* for implementors */
+void e_import_hook_class_add_target_map(EImportHookClass *klass, const EImportHookTargetMap *);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __E_IMPORT_H__ */