aboutsummaryrefslogtreecommitdiff
path: root/src/import.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-08-06 09:26:12 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-08-06 09:26:12 +0000
commit2d01a4712433affe66a398c4769125015cb7691d (patch)
treeed799288cece78496e805e5dfe5723a66e033b90 /src/import.c
parenta13c336e4fe1c4b8c370a7b21d595ccf20b3f821 (diff)
win32: implemented automatic import of Outlook Express mail stores on first run.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2661 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/import.c')
-rw-r--r--src/import.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/import.c b/src/import.c
index b0a4c21c..615ccaf3 100644
--- a/src/import.c
+++ b/src/import.c
@@ -462,6 +462,93 @@ static gint import_dbx(FolderItem *dest, const gchar *file)
return 0;
}
+gint import_dbx_folders(FolderItem *dest, const gchar *path)
+{
+ GDir *dir;
+ const gchar *dir_name, *p;
+ gchar *orig_name, *folder_name, *file;
+ gchar *msg;
+ FolderItem *sub_folder;
+ gint count;
+ gint ok = 0;
+
+ g_return_val_if_fail(dest != NULL, -1);
+ g_return_val_if_fail(dest->folder != NULL, -1);
+ g_return_val_if_fail(path != NULL, -1);
+
+ if ((dir = g_dir_open(path, 0, NULL)) == NULL) {
+ g_warning("failed to open directory: %s", path);
+ return -1;
+ }
+
+ progress = progress_dialog_simple_create();
+ gtk_window_set_title(GTK_WINDOW(progress->window), _("Importing"));
+ progress_dialog_set_label(progress, _("Importing Outlook Express folders"));
+ gtk_window_set_modal(GTK_WINDOW(progress->window), TRUE);
+ manage_window_set_transient(GTK_WINDOW(progress->window));
+ gtk_widget_hide(progress->cancel_btn);
+ g_signal_connect(G_OBJECT(progress->window), "delete_event",
+ G_CALLBACK(gtk_true), NULL);
+ gtk_widget_show(progress->window);
+ ui_update();
+
+ while ((dir_name = g_dir_read_name(dir)) != NULL) {
+ if ((p = strrchr(dir_name, '.')) &&
+ !g_ascii_strcasecmp(p + 1, "dbx")) {
+ file = g_strconcat(path, G_DIR_SEPARATOR_S, dir_name,
+ NULL);
+ orig_name = g_strndup(dir_name, p - dir_name);
+ if (!g_file_test(file, G_FILE_TEST_IS_REGULAR) ||
+ !g_ascii_strcasecmp(orig_name, "Folders") ||
+ !g_ascii_strcasecmp(orig_name, "Offline") ||
+ !g_ascii_strcasecmp(orig_name, "Pop3uidl")) {
+ g_free(orig_name);
+ g_free(file);
+ continue;
+ }
+
+ folder_name = g_strdup(orig_name);
+ count = 1;
+ while (folder_find_child_item_by_name(dest, folder_name)) {
+ g_free(folder_name);
+ folder_name = g_strdup_printf("%s (%d)", orig_name, count++);
+ }
+ g_print("orig_name: %s , folder_name: %s\n", orig_name, folder_name);
+
+ sub_folder = dest->folder->klass->create_folder(dest->folder, dest, folder_name);
+ if (!sub_folder) {
+ alertpanel_error(_("Cannot create the folder '%s'."), folder_name);
+ ok = -1;
+ break;
+ }
+ folderview_append_item(folderview_get(), NULL, sub_folder, TRUE);
+ folder_write_list();
+ msg = g_strdup_printf(_("Importing %s ..."), orig_name);
+ progress_dialog_set_label(progress, msg);
+ g_free(msg);
+ import_dbx(sub_folder, file);
+
+ progress_dialog_set_label(progress, _("Scanning folder..."));
+ ui_update();
+ folder_item_scan(sub_folder);
+ folderview_update_item(sub_folder, TRUE);
+
+ g_free(folder_name);
+ g_free(orig_name);
+ g_free(file);
+ }
+ }
+
+ g_dir_close(dir);
+
+ progress_dialog_destroy(progress);
+ progress = NULL;
+
+ folder_write_list();
+
+ return ok;
+}
+
static void import_create(void)
{
GtkWidget *vbox;