aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--libsylph/mh.c12
-rw-r--r--src/summaryview.c28
3 files changed, 45 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 34e59de3..38b95141 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-09-03
+
+ * libsylph/mh.c
+ src/summaryview.c: show progress when scanning folders.
+
2009-08-20
* libsylph/utils.c: set_log_file(): open log file as text mode.
diff --git a/libsylph/mh.c b/libsylph/mh.c
index 11099f76..5852e7c8 100644
--- a/libsylph/mh.c
+++ b/libsylph/mh.c
@@ -1279,8 +1279,12 @@ static GSList *mh_get_uncached_msgs(GHashTable *msg_table, FolderItem *item)
MsgInfo *msginfo;
gint n_newmsg = 0;
gint num;
+ Folder *folder;
g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->folder != NULL, NULL);
+
+ folder = item->folder;
path = folder_item_get_path(item);
g_return_val_if_fail(path != NULL, NULL);
@@ -1298,6 +1302,8 @@ static GSList *mh_get_uncached_msgs(GHashTable *msg_table, FolderItem *item)
debug_print("Searching uncached messages...\n");
if (msg_table) {
+ gint count = 0;
+
while ((dir_name = g_dir_read_name(dp)) != NULL) {
if ((num = to_number(dir_name)) <= 0) continue;
@@ -1320,6 +1326,10 @@ static GSList *mh_get_uncached_msgs(GHashTable *msg_table, FolderItem *item)
}
n_newmsg++;
}
+
+ count++;
+ if (folder->ui_func)
+ folder->ui_func(folder, item, folder->ui_func_data ? folder->ui_func_data : GINT_TO_POINTER(count));
}
} else {
/* discard all previous cache */
@@ -1336,6 +1346,8 @@ static GSList *mh_get_uncached_msgs(GHashTable *msg_table, FolderItem *item)
last = last->next;
}
n_newmsg++;
+ if (folder->ui_func)
+ folder->ui_func(folder, item, folder->ui_func_data ? folder->ui_func_data : GINT_TO_POINTER(n_newmsg));
}
}
diff --git a/src/summaryview.c b/src/summaryview.c
index aa6e0b4e..4829f7e0 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -624,6 +624,28 @@ void summary_init(SummaryView *summaryview)
summary_set_menu_sensitive(summaryview);
}
+static void get_msg_list_func(Folder *folder, FolderItem *item, gpointer data)
+{
+ SummaryView *summary = (SummaryView *)folder->data;
+ gint count = GPOINTER_TO_INT(data);
+ static GTimeVal tv_prev = {0, 0};
+ GTimeVal tv_cur;
+
+ g_get_current_time(&tv_cur);
+
+ if (tv_prev.tv_sec == 0 ||
+ (tv_cur.tv_sec - tv_prev.tv_sec) * G_USEC_PER_SEC +
+ tv_cur.tv_usec - tv_prev.tv_usec > 100 * 1000) {
+ gchar buf[256];
+
+ g_snprintf(buf, sizeof(buf), _("Scanning folder (%s) (%d)..."),
+ item->path, count);
+ STATUSBAR_POP(summary->mainwin);
+ STATUSBAR_PUSH(summary->mainwin, buf);
+ tv_prev = tv_cur;
+ }
+}
+
gboolean summary_show(SummaryView *summaryview, FolderItem *item,
gboolean update_cache)
{
@@ -639,6 +661,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
gboolean do_qsearch = FALSE;
gboolean set_column_order_required = FALSE;
const gchar *key = NULL;
+ gpointer save_data;
if (summary_is_locked(summaryview)) return FALSE;
@@ -732,7 +755,12 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
main_window_cursor_wait(summaryview->mainwin);
+ save_data = item->folder->data;
+ item->folder->data = summaryview;
+ folder_set_ui_func(item->folder, get_msg_list_func, NULL);
mlist = folder_item_get_msg_list(item, !update_cache);
+ folder_set_ui_func(item->folder, NULL, NULL);
+ item->folder->data = save_data;
statusbar_pop_all();
STATUSBAR_POP(summaryview->mainwin);