diff options
Diffstat (limited to 'libsylph')
-rw-r--r-- | libsylph/imap.c | 6 | ||||
-rw-r--r-- | libsylph/utils.c | 13 | ||||
-rw-r--r-- | libsylph/utils.h | 8 |
3 files changed, 26 insertions, 1 deletions
diff --git a/libsylph/imap.c b/libsylph/imap.c index cc178340..7b915c9d 100644 --- a/libsylph/imap.c +++ b/libsylph/imap.c @@ -1210,6 +1210,7 @@ static gint imap_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list, PROGRESS_UPDATE_INTERVAL * 1000) { status_print(_("Appending messages to %s (%d / %d)"), dest->path, count, total); + progress_show(count, total); ui_update(); tv_prev = tv_cur; } @@ -1221,6 +1222,7 @@ static gint imap_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list, if (ok != IMAP_SUCCESS) { g_warning("can't append message %s\n", fileinfo->file); g_free(destdir); + progress_show(0, 0); return -1; } @@ -1240,6 +1242,7 @@ static gint imap_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list, dest->unread++; } + progress_show(0, 0); g_free(destdir); if (remove_source) { @@ -2299,6 +2302,7 @@ static GSList *imap_get_uncached_messages(IMAPSession *session, status_print (_("Getting message headers (%d / %d)"), count, exists); + progress_show(count, exists); ui_update(); tv_prev = tv_cur; } @@ -2308,6 +2312,7 @@ static GSList *imap_get_uncached_messages(IMAPSession *session, if (sock_getline(SESSION(session)->sock, &tmp) < 0) { log_warning(_("error occurred while getting envelope.\n")); g_string_free(str, TRUE); + progress_show(0, 0); return newlist; } strretchomp(tmp); @@ -2355,6 +2360,7 @@ static GSList *imap_get_uncached_messages(IMAPSession *session, item->total++; } + progress_show(0, 0); g_string_free(str, TRUE); session_set_access_time(SESSION(session)); diff --git a/libsylph/utils.c b/libsylph/utils.c index c6427cfd..8c2c2b80 100644 --- a/libsylph/utils.c +++ b/libsylph/utils.c @@ -3278,6 +3278,19 @@ void ui_update(void) ui_update_func(); } +static ProgressFunc progress_func = NULL; + +void set_progress_func(ProgressFunc func) +{ + progress_func = func; +} + +void progress_show(gint cur, gint total) +{ + if (progress_func) + progress_func(cur, total); +} + /* user input */ static QueryPasswordFunc query_password_func = NULL; diff --git a/libsylph/utils.h b/libsylph/utils.h index 8d257366..d367f362 100644 --- a/libsylph/utils.h +++ b/libsylph/utils.h @@ -177,6 +177,8 @@ gint g_chmod (const gchar *path, } typedef void (*UIUpdateFunc) (void); +typedef void (*ProgressFunc) (gint cur, + gint total); typedef gchar * (*QueryPasswordFunc) (const gchar *server, const gchar *user); typedef void (*LogFunc) (const gchar *str); @@ -475,7 +477,11 @@ size_t my_strftime (gchar *s, /* UI hints */ void set_ui_update_func (UIUpdateFunc func); -void ui_update(void); +void ui_update (void); + +void set_progress_func (ProgressFunc func); +void progress_show (gint cur, + gint total); /* user input */ void set_input_query_password_func (QueryPasswordFunc func); |