aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/pst-import
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pst-import')
-rw-r--r--plugins/pst-import/pst-importer.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/plugins/pst-import/pst-importer.c b/plugins/pst-import/pst-importer.c
index 40cd745bbf..f764848d12 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);
}
}