MBOX import: give a better estimation of the time left and grey out widgets while...
authorColin Leroy <colin@colino.net>
Tue, 13 Aug 2019 08:13:29 +0000 (10:13 +0200)
committerColin Leroy <colin@colino.net>
Tue, 13 Aug 2019 08:13:29 +0000 (10:13 +0200)
src/import.c
src/mbox.c

index 1dcd12a..e6b2f31 100644 (file)
@@ -231,6 +231,14 @@ static void import_ok_cb(GtkWidget *widget, gpointer data)
                g_free(mbox);
                return;
        } else {
+               gtk_widget_set_sensitive(file_entry, FALSE);
+               gtk_widget_set_sensitive(dest_entry, FALSE);
+               gtk_widget_set_sensitive(file_button, FALSE);
+               gtk_widget_set_sensitive(dest_button, FALSE);
+               gtk_widget_set_sensitive(ok_button, FALSE);
+               gtk_widget_set_sensitive(cancel_button, FALSE);
+               GTK_EVENTS_FLUSH();
+
                import_ok = proc_mbox(dest, mbox, FALSE, NULL);
        }
 
index 9047fbb..6375615 100644 (file)
@@ -86,12 +86,19 @@ gint proc_mbox(FolderItem *dest, const gchar *mbox, gboolean apply_filter,
        GSList *to_filter = NULL, *filtered = NULL, *unfiltered = NULL, *cur, *to_add = NULL;
        gboolean printed = FALSE;
        FolderItem *dropfolder;
+       GStatBuf src_stat;
 
        cm_return_val_if_fail(dest != NULL, -1);
        cm_return_val_if_fail(mbox != NULL, -1);
 
        debug_print("Getting messages from %s into %s...\n", mbox, dest->path);
 
+       if (g_stat(mbox, &src_stat) < 0) {
+               FILE_OP_ERROR(mbox, "g_stat");
+               alertpanel_error(_("Could not stat mbox file:\n%s\n"), mbox);
+               return -1;
+       }
+
        if ((mbox_fp = claws_fopen(mbox, "rb")) == NULL) {
                FILE_OP_ERROR(mbox, "claws_fopen");
                alertpanel_error(_("Could not open mbox file:\n%s\n"), mbox);
@@ -127,12 +134,14 @@ gint proc_mbox(FolderItem *dest, const gchar *mbox, gboolean apply_filter,
                gint empty_lines;
                gint msgnum;
                
-               if (msgs > 0 && msgs%500 == 0) {
+               if (msgs%500 == 0) {
+                       long cur_offset_mb = ftell(mbox_fp) / (1024 * 1024);
                        if (printed)
                                statusbar_pop_all();
                        statusbar_print_all(
-                                       ngettext("Importing from mbox... (%d mail imported)",
-                                               "Importing from mbox... (%d mails imported)", msgs), msgs);
+                                       ngettext("Importing from mbox... (%ld MB imported)",
+                                               "Importing from mbox... (%ld MB imported)", cur_offset_mb), cur_offset_mb);
+                       statusbar_progress_all(cur_offset_mb, src_stat.st_size / (1024*1024), 1);
                        printed=TRUE;
                        GTK_EVENTS_FLUSH();
                }
@@ -255,8 +264,10 @@ gint proc_mbox(FolderItem *dest, const gchar *mbox, gboolean apply_filter,
                msgs++;
        } while (more);
 
-       if (printed)
+       if (printed) {
                statusbar_pop_all();
+               statusbar_progress_all(0, 0, 0);
+       }
 
        if (apply_filter) {