diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-02-01 10:34:00 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-02-01 10:34:00 +0000 |
commit | dfe3a16ff4cc92ff2160b1e2118de1d6222f0480 (patch) | |
tree | 0511ab152f0f4a56ad191dab01c5b76ee575471a /src/folderview.c | |
parent | 47e5c73b0c0d9260476a3ec7dd6eb8dbf22dfde7 (diff) |
properly count the number of new messages on local and remote mailboxes.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@958 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/folderview.c')
-rw-r--r-- | src/folderview.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/src/folderview.c b/src/folderview.c index 4778b945..1ba79a79 100644 --- a/src/folderview.c +++ b/src/folderview.c @@ -929,20 +929,21 @@ static void folderview_rescan_tree(FolderView *folderview, Folder *folder) inc_unlock(); } -void folderview_check_new(Folder *folder) +gint folderview_check_new(Folder *folder) { FolderItem *item; FolderView *folderview; GtkTreeModel *model; GtkTreeIter iter; gboolean valid; + gint prev_new, prev_unread, n_updated = 0; folderview = (FolderView *)folderview_list->data; model = GTK_TREE_MODEL(folderview->store); if (folder && !FOLDER_IS_LOCAL(folder)) { if (!main_window_toggle_online_if_offline(folderview->mainwin)) - return; + return 0; } inc_lock(); @@ -961,12 +962,18 @@ void folderview_check_new(Folder *folder) if (folder && folder != item->folder) continue; if (!folder && !FOLDER_IS_LOCAL(item->folder)) continue; + prev_new = item->new; + prev_unread = item->unread; folderview_scan_tree_func(item->folder, item, NULL); if (folder_item_scan(item) < 0) { if (folder && !FOLDER_IS_LOCAL(folder)) break; } folderview_update_row(folderview, &iter); + if (prev_unread < item->unread) + n_updated += item->unread - prev_unread; + else if (prev_new < item->new) + n_updated += item->new - prev_new; } gtk_widget_set_sensitive(folderview->treeview, TRUE); @@ -975,20 +982,23 @@ void folderview_check_new(Folder *folder) statusbar_pop_all(); folder_write_list(); + + return n_updated; } -void folderview_check_new_item(FolderItem *item) +gint folderview_check_new_item(FolderItem *item) { Folder *folder; FolderView *folderview; GtkTreeModel *model; GtkTreeIter iter; + gint prev_new, prev_unread, n_updated = 0; - g_return_if_fail(item != NULL); - g_return_if_fail(item->folder != NULL); + g_return_val_if_fail(item != NULL, 0); + g_return_val_if_fail(item->folder != NULL, 0); if (!item->path || item->no_select) - return; + return 0; folderview = (FolderView *)folderview_list->data; model = GTK_TREE_MODEL(folderview->store); @@ -997,21 +1007,27 @@ void folderview_check_new_item(FolderItem *item) if (!FOLDER_IS_LOCAL(folder)) { if (!main_window_toggle_online_if_offline(folderview->mainwin)) - return; + return 0; } if (!gtkut_tree_model_find_by_column_data (model, &iter, NULL, COL_FOLDER_ITEM, item)) - return; + return 0; inc_lock(); main_window_lock(folderview->mainwin); gtk_widget_set_sensitive(folderview->treeview, FALSE); GTK_EVENTS_FLUSH(); + prev_new = item->new; + prev_unread = item->unread; folderview_scan_tree_func(folder, item, NULL); folder_item_scan(item); folderview_update_row(folderview, &iter); + if (prev_unread < item->unread) + n_updated = item->unread - prev_unread; + else if (prev_new < item->new) + n_updated = item->new - prev_new; gtk_widget_set_sensitive(folderview->treeview, TRUE); main_window_unlock(folderview->mainwin); @@ -1019,13 +1035,16 @@ void folderview_check_new_item(FolderItem *item) statusbar_pop_all(); folder_write_list(); + + return n_updated; } -void folderview_check_new_all(void) +gint folderview_check_new_all(void) { GList *list; GtkWidget *window; FolderView *folderview; + gint n_updated = 0; folderview = (FolderView *)folderview_list->data; @@ -1038,12 +1057,14 @@ void folderview_check_new_all(void) for (; list != NULL; list = list->next) { Folder *folder = list->data; - folderview_check_new(folder); + n_updated += folderview_check_new(folder); } gtk_widget_destroy(window); main_window_unlock(folderview->mainwin); inc_unlock(); + + return n_updated; } static gboolean folderview_search_new_recursive(GtkTreeModel *model, |