[evolution/webkit] Bug #641701 - Issues with pst-import plugin



commit f50c15ed2004f6f2e29c88cee9857c7c8bc5c405
Author: Milan Crha <mcrha redhat com>
Date:   Thu Feb 10 12:16:21 2011 +0100

    Bug #641701 - Issues with pst-import plugin

 plugins/pst-import/pst-importer.c |   35 +++++++++++++++++++++++------------
 1 files changed, 23 insertions(+), 12 deletions(-)
---
diff --git a/plugins/pst-import/pst-importer.c b/plugins/pst-import/pst-importer.c
index 40cd745..f764848 100644
--- a/plugins/pst-import/pst-importer.c
+++ b/plugins/pst-import/pst-importer.c
@@ -114,7 +114,7 @@ struct _PstImporter {
 	gchar *status_what;
 	gint status_pc;
 	gint status_timeout_id;
-	GCancellable *status;
+	GCancellable *cancellable;
 
 	pst_file pst;
 
@@ -650,6 +650,9 @@ string_to_utf8 (const gchar *string)
 {
 	gchar *utf8;
 
+	if (g_utf8_validate (string, -1, NULL))
+		return g_strdup (string);
+
 	utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL);
 
 	return utf8;
@@ -737,6 +740,11 @@ pst_create_folder (PstImporter *m)
 
 	g_assert (g_str_has_prefix (dest, parent));
 
+	if (m->folder) {
+		g_object_unref (m->folder);
+		m->folder = NULL;
+	}
+
 	dest_len = strlen (dest);
 	dest_end = dest + dest_len;
 
@@ -752,20 +760,20 @@ pst_create_folder (PstImporter *m)
 			folder = e_mail_session_uri_to_folder_sync (
 				session, dest, CAMEL_STORE_FOLDER_CREATE,
 				cancellable, &m->base.error);
-			g_object_unref (folder);
+			if (folder)
+				g_object_unref (folder);
+			else
+				break;
 			*pos = '/';
 		}
 	}
 
 	g_free (dest);
 
-	if (m->folder) {
-		g_object_unref (m->folder);
-	}
-
-	m->folder = e_mail_session_uri_to_folder_sync (
-		session, m->folder_uri, CAMEL_STORE_FOLDER_CREATE,
-		cancellable, &m->base.error);
+	if (!m->base.error)
+		m->folder = e_mail_session_uri_to_folder_sync (
+			session, m->folder_uri, CAMEL_STORE_FOLDER_CREATE,
+			cancellable, &m->base.error);
 }
 
 /**
@@ -821,6 +829,8 @@ pst_process_email (PstImporter *m, pst_item *item)
 
 	if (m->folder == NULL) {
 		pst_create_folder (m);
+		if (!m->folder)
+			return;
 	}
 
 	camel_folder_freeze (m->folder);
@@ -1591,7 +1601,7 @@ static void
 pst_import_free (PstImporter *m)
 {
 //	pst_close (&m->pst);
-	g_object_unref (m->status);
+	g_object_unref (m->cancellable);
 
 	g_free (m->status_what);
 	g_mutex_free (m->status_lock);
@@ -1670,9 +1680,10 @@ pst_import (EImport *ei, EImportTarget *target)
 	m->status_timeout_id = g_timeout_add (100, pst_status_timeout, m);
 	/*m->status_timeout_id = NULL;*/
 	m->status_lock = g_mutex_new ();
+	m->cancellable = camel_operation_new ();
 
 	g_signal_connect (
-		m->status, "status",
+		m->cancellable, "status",
 		G_CALLBACK (pst_status), m);
 
 	id = m->base.seq;
@@ -1703,7 +1714,7 @@ org_credativ_evolution_readpst_cancel (EImport *ei, EImportTarget *target, EImpo
 	PstImporter *m = g_datalist_get_data (&target->data, "pst-msg");
 
 	if (m) {
-		g_cancellable_cancel (m->status);
+		g_cancellable_cancel (m->cancellable);
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]