From d13865f1395d65bed655a800ccd6886a8e525951 Mon Sep 17 00:00:00 2001 From: hiro Date: Thu, 3 Sep 2009 07:22:25 +0000 Subject: show progress when scanning folders. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2230 ee746299-78ed-0310-b773-934348b2243d --- ChangeLog | 5 +++++ libsylph/mh.c | 12 ++++++++++++ src/summaryview.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) 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); -- cgit v1.2.3