aboutsummaryrefslogtreecommitdiffstats
path: root/mail/importers/evolution-mbox-importer.c
diff options
context:
space:
mode:
authorMichael Zucci <zucchi@src.gnome.org>2005-07-12 12:04:14 +0800
committerMichael Zucci <zucchi@src.gnome.org>2005-07-12 12:04:14 +0800
commit9f12922bd88bd7a83247cc7e0646c72773e2a013 (patch)
treeda9a3d002dfa58ff262ef25ca3effe426fbfcc3a /mail/importers/evolution-mbox-importer.c
parentcf563ecd524fd20fb3cc8ebade877ad442d85c43 (diff)
downloadgsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.tar
gsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.tar.gz
gsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.tar.bz2
gsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.tar.lz
gsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.tar.xz
gsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.tar.zst
gsoc2013-evolution-9f12922bd88bd7a83247cc7e0646c72773e2a013.zip
Merge back eplugin-import-branch.
svn path=/trunk/; revision=29725
Diffstat (limited to 'mail/importers/evolution-mbox-importer.c')
-rw-r--r--mail/importers/evolution-mbox-importer.c191
1 files changed, 77 insertions, 114 deletions
diff --git a/mail/importers/evolution-mbox-importer.c b/mail/importers/evolution-mbox-importer.c
index 3630277cdd..804a137543 100644
--- a/mail/importers/evolution-mbox-importer.c
+++ b/mail/importers/evolution-mbox-importer.c
@@ -36,18 +36,13 @@
#include <string.h>
#include <gtk/gtkhbox.h>
+#include <gtk/gtkvbox.h>
#include <gtk/gtklabel.h>
-#include <gtk/gtkmessagedialog.h>
-#include <gtk/gtkprogressbar.h>
-#include <bonobo/bonobo-control.h>
-#include <libgnome/gnome-i18n.h>
+#include <glib/gi18n.h>
#include <camel/camel-exception.h>
-#include <importer/evolution-importer.h>
-#include <importer/GNOME_Evolution_Importer.h>
-
#include "mail/em-folder-selection-button.h"
#include "mail/mail-component.h"
@@ -55,17 +50,11 @@
#include "mail-importer.h"
-/* #define IMPORTER_DEBUG */
-#ifdef IMPORTER_DEBUG
-#define IN g_print ("=====> %s (%d)\n", G_GNUC_FUNCTION, __LINE__)
-#define OUT g_print ("<==== %s (%d)\n", G_GNUC_FUNCTION, __LINE__)
-#else
-#define IN
-#define OUT
-#endif
+#include "e-util/e-import.h"
typedef struct {
- EvolutionImporter *ii;
+ EImport *import;
+ EImportTarget *target;
GMutex *status_lock;
char *status_what;
@@ -73,42 +62,18 @@ typedef struct {
int status_timeout_id;
CamelOperation *cancel; /* cancel/status port */
- GtkWidget *selector;
- GtkWidget *label;
- GtkWidget *progressbar;
- GtkWidget *dialog;
-
char *uri;
} MboxImporter;
static void
-process_item_fn(EvolutionImporter *eimporter, CORBA_Object listener, void *data, CORBA_Environment *ev)
-{
- /*MboxImporter *importer = data;*/
- GNOME_Evolution_ImporterListener_ImporterResult result;
-
- /* This is essentially a NOOP, it merely returns ok/fail and is only called once */
-
-#if 0
- if (camel_exception_is_set(importer->ex))
- result = GNOME_Evolution_ImporterListener_BAD_FILE;
- else
-#endif
- result = GNOME_Evolution_ImporterListener_OK;
-
- GNOME_Evolution_ImporterListener_notifyResult(listener, result, FALSE, ev);
- bonobo_object_unref(BONOBO_OBJECT(eimporter));
-}
-
-static void
-folder_selected(EMFolderSelectionButton *button, MboxImporter *importer)
+folder_selected(EMFolderSelectionButton *button, EImportTargetURI *target)
{
- g_free(importer->uri);
- importer->uri = g_strdup(em_folder_selection_button_get_selection(button));
+ g_free(target->uri_dest);
+ target->uri_dest = g_strdup(em_folder_selection_button_get_selection(button));
}
-static void
-create_control_fn(EvolutionImporter *importer, Bonobo_Control *control, void *data)
+static GtkWidget *
+mbox_getwidget(EImport *ei, EImportTarget *target, EImportImporter *im)
{
GtkWidget *hbox, *w;
@@ -120,23 +85,35 @@ create_control_fn(EvolutionImporter *importer, Bonobo_Control *control, void *da
w = em_folder_selection_button_new(_("Select folder"), _("Select folder to import into"));
em_folder_selection_button_set_selection((EMFolderSelectionButton *)w,
mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_INBOX));
- g_signal_connect(w, "selected", G_CALLBACK(folder_selected), data);
+ g_signal_connect(w, "selected", G_CALLBACK(folder_selected), target);
gtk_box_pack_start((GtkBox *)hbox, w, FALSE, TRUE, 6);
- gtk_widget_show_all(hbox);
+ w = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start((GtkBox *)w, hbox, FALSE, FALSE, 0);
+ gtk_widget_show_all(w);
- /* Another weird-arsed shell api */
- *control = BONOBO_OBJREF(bonobo_control_new(hbox));
+ return w;
}
static gboolean
-support_format_fn(EvolutionImporter *importer, const char *filename, void *closure)
+mbox_supported(EImport *ei, EImportTarget *target, EImportImporter *im)
{
char signature[6];
gboolean ret = FALSE;
int fd, n;
+ EImportTargetURI *s;
+
+ if (target->type != E_IMPORT_TARGET_URI)
+ return FALSE;
- fd = open(filename, O_RDONLY);
+ s = (EImportTargetURI *)target;
+ if (s->uri_src == NULL)
+ return TRUE;
+
+ if (strncmp(s->uri_src, "file:///", strlen("file:///")) != 0)
+ return FALSE;
+
+ fd = open(s->uri_src + strlen("file://"), O_RDONLY);
if (fd != -1) {
n = read(fd, signature, 5);
ret = n == 5 && memcmp(signature, "From ", 5) == 0;
@@ -147,22 +124,6 @@ support_format_fn(EvolutionImporter *importer, const char *filename, void *closu
}
static void
-importer_destroy_cb(void *data, GObject *object)
-{
- MboxImporter *importer = data;
-
- if (importer->status_timeout_id)
- g_source_remove(importer->status_timeout_id);
- g_free(importer->status_what);
- g_mutex_free(importer->status_lock);
-
- if (importer->dialog)
- gtk_widget_destroy(importer->dialog);
-
- g_free(importer);
-}
-
-static void
mbox_status(CamelOperation *op, const char *what, int pc, void *data)
{
MboxImporter *importer = data;
@@ -186,72 +147,74 @@ mbox_status_timeout(void *data)
int pc;
char *what;
- if (!importer->status_what)
- return TRUE;
+ if (importer->status_what) {
+ g_mutex_lock(importer->status_lock);
+ what = importer->status_what;
+ importer->status_what = NULL;
+ pc = importer->status_pc;
+ g_mutex_unlock(importer->status_lock);
- g_mutex_lock(importer->status_lock);
- what = importer->status_what;
- importer->status_what = NULL;
- pc = importer->status_pc;
- g_mutex_unlock(importer->status_lock);
+ e_import_status(importer->import, (EImportTarget *)importer->target, what, pc);
+ }
- gtk_progress_bar_set_fraction((GtkProgressBar *)importer->progressbar, (gfloat)(pc/100.0));
- gtk_progress_bar_set_text((GtkProgressBar *)importer->progressbar, what);
-
return TRUE;
}
static void
-mbox_importer_response(GtkWidget *w, guint button, void *data)
+mbox_import_done(void *data, CamelException *ex)
{
MboxImporter *importer = data;
- if (button == GTK_RESPONSE_CANCEL
- && importer->cancel)
- camel_operation_cancel(importer->cancel);
+ g_source_remove(importer->status_timeout_id);
+ g_free(importer->status_what);
+ g_mutex_free(importer->status_lock);
+ camel_operation_unref(importer->cancel);
+
+ e_import_complete(importer->import, importer->target);
+ g_free(importer);
}
-static gboolean
-load_file_fn(EvolutionImporter *eimporter, const char *filename, void *data)
+static void
+mbox_import(EImport *ei, EImportTarget *target, EImportImporter *im)
{
- MboxImporter *importer = data;
- char *utf8_filename;
-
- utf8_filename = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
- importer->dialog = gtk_message_dialog_new(NULL, 0/*GTK_DIALOG_NO_SEPARATOR*/,
- GTK_MESSAGE_INFO, GTK_BUTTONS_CANCEL,
- _("Importing `%s'"), utf8_filename);
- g_free (utf8_filename);
- gtk_window_set_title (GTK_WINDOW (importer->dialog), _("Importing..."));
-
- importer->label = gtk_label_new (_("Please wait"));
- importer->progressbar = gtk_progress_bar_new ();
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (importer->dialog)->vbox), importer->label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (importer->dialog)->vbox), importer->progressbar, FALSE, FALSE, 0);
- g_signal_connect(importer->dialog, "response", G_CALLBACK(mbox_importer_response), importer);
- gtk_widget_show_all(importer->dialog);
+ MboxImporter *importer;
+ /* TODO: do we validate target? */
+
+ importer = g_malloc0(sizeof(*importer));
+ g_datalist_set_data(&target->data, "mbox-data", importer);
+ importer->import = ei;
+ importer->target = target;
+ importer->status_lock = g_mutex_new();
importer->status_timeout_id = g_timeout_add(100, mbox_status_timeout, importer);
importer->cancel = camel_operation_new(mbox_status, importer);
- mail_msg_wait(mail_importer_import_mbox(filename, importer->uri, importer->cancel));
+ mail_importer_import_mbox(((EImportTargetURI *)target)->uri_src+strlen("file://"), ((EImportTargetURI *)target)->uri_dest, importer->cancel, mbox_import_done, importer);
+}
- camel_operation_unref(importer->cancel);
- g_source_remove(importer->status_timeout_id);
- importer->status_timeout_id = 0;
+static void
+mbox_cancel(EImport *ei, EImportTarget *target, EImportImporter *im)
+{
+ MboxImporter *importer = g_datalist_get_data(&target->data, "mbox-data");
- return TRUE;
+ if (importer)
+ camel_operation_cancel(importer->cancel);
}
-BonoboObject *
-mbox_importer_new(void)
+static EImportImporter mbox_importer = {
+ E_IMPORT_TARGET_URI,
+ 0,
+ mbox_supported,
+ mbox_getwidget,
+ mbox_import,
+ mbox_cancel,
+};
+
+EImportImporter *
+mbox_importer_peek(void)
{
- MboxImporter *mbox;
-
- mbox = g_new0 (MboxImporter, 1);
- mbox->status_lock = g_mutex_new();
- mbox->ii = evolution_importer_new(create_control_fn, support_format_fn, load_file_fn, process_item_fn, NULL, mbox);
- g_object_weak_ref(G_OBJECT(mbox->ii), importer_destroy_cb, mbox);
-
- return BONOBO_OBJECT (mbox->ii);
+ mbox_importer.name = _("Berkeley Mailbox (mbox)");
+ mbox_importer.description = _("Importer Berkeley Mailbox format folders");
+
+ return &mbox_importer;
}