From e3262cdc7e24aece3074a0c92ce3e529acf3568e Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 10 Dec 2003 18:36:13 +0000 Subject: Update the unread count in the model if the folder got new mail. 2003-12-10 Jeffrey Stedfast * mail-folder-cache.c (real_flush_updates): Update the unread count in the model if the folder got new mail. * em-folder-selection.c (em_select_folder): Updated. * em-folder-selection-button.c (em_folder_selection_button_clicked): Updated. * em-folder-tree-model.c (em_folder_tree_model_set_unread_count): New function to update the unread count for a folder. * mail-component.c (mail_component_peek_tree_model): Don't ref the model. Also renamed s/get/peek/ svn path=/trunk/; revision=23910 --- mail/ChangeLog | 16 ++++++++++++++++ mail/em-folder-selection-button.c | 2 +- mail/em-folder-selection.c | 4 ++-- mail/em-folder-tree-model.c | 33 +++++++++++++++++++++++++++++++++ mail/em-folder-tree-model.h | 2 ++ mail/mail-component.c | 3 +-- mail/mail-component.h | 3 ++- mail/mail-folder-cache.c | 12 +++++++++++- 8 files changed, 68 insertions(+), 7 deletions(-) diff --git a/mail/ChangeLog b/mail/ChangeLog index 573ddc30d3..81780aa030 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,19 @@ +2003-12-10 Jeffrey Stedfast + + * mail-folder-cache.c (real_flush_updates): Update the unread + count in the model if the folder got new mail. + + * em-folder-selection.c (em_select_folder): Updated. + + * em-folder-selection-button.c + (em_folder_selection_button_clicked): Updated. + + * em-folder-tree-model.c (em_folder_tree_model_set_unread_count): + New function to update the unread count for a folder. + + * mail-component.c (mail_component_peek_tree_model): Don't ref the + model. Also renamed s/get/peek/ + 2003-12-10 Not Zed * em-format-html-display.c (efhd_multipart_signed): diff --git a/mail/em-folder-selection-button.c b/mail/em-folder-selection-button.c index 5187e8d324..ce5f38680c 100644 --- a/mail/em-folder-selection-button.c +++ b/mail/em-folder-selection-button.c @@ -211,7 +211,7 @@ em_folder_selection_button_clicked (GtkButton *button) if (GTK_BUTTON_CLASS (parent_class)->clicked != NULL) (* GTK_BUTTON_CLASS (parent_class)->clicked) (button); - model = mail_component_get_tree_model (mail_component_peek ()); + model = mail_component_peek_tree_model (mail_component_peek ()); emft = (EMFolderTree *) em_folder_tree_new_with_model (model); dialog = em_folder_selector_new (emft, EM_FOLDER_SELECTOR_CAN_CREATE, priv->title, priv->caption); diff --git a/mail/em-folder-selection.c b/mail/em-folder-selection.c index 6137e15e88..0534ca99e1 100644 --- a/mail/em-folder-selection.c +++ b/mail/em-folder-selection.c @@ -61,8 +61,8 @@ em_select_folder (GtkWindow *parent_window, const char *title, const char *defau EMFolderTreeModel *model; GtkWidget *dialog; EMFolderTree *emft; - - model = mail_component_get_tree_model (mail_component_peek ()); + + model = mail_component_peek_tree_model (mail_component_peek ()); emft = (EMFolderTree *) em_folder_tree_new_with_model (model); dialog = em_folder_selector_new(emft, EM_FOLDER_SELECTOR_CAN_CREATE, title, NULL); diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c index 1e6df96fbf..e7a766cc61 100644 --- a/mail/em-folder-tree-model.c +++ b/mail/em-folder-tree-model.c @@ -1197,3 +1197,36 @@ em_folder_tree_model_save_expanded (EMFolderTreeModel *model) unlink (tmpname); g_free (tmpname); } + + +void +em_folder_tree_model_set_unread_count (EMFolderTreeModel *model, CamelStore *store, const char *path, int unread) +{ + struct _EMFolderTreeModelStoreInfo *si; + GtkTreeRowReference *row; + GtkTreePath *tree_path; + GtkTreeIter iter; + + g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model)); + g_return_if_fail (CAMEL_IS_STORE (store)); + g_return_if_fail (path != NULL); + + if (unread < 0) + unread = 0; + + if (!(si = g_hash_table_lookup (model->store_hash, store))) + return; + + if (!(row = g_hash_table_lookup (si->path_hash, path))) + return; + + tree_path = gtk_tree_row_reference_get_path (row); + if (!gtk_tree_model_get_iter ((GtkTreeModel *) model, &iter, tree_path)) { + gtk_tree_path_free (tree_path); + return; + } + + gtk_tree_path_free (tree_path); + + gtk_tree_store_set ((GtkTreeStore *) model, &iter, COL_UINT_UNREAD, unread, -1); +} diff --git a/mail/em-folder-tree-model.h b/mail/em-folder-tree-model.h index 3296af1ed1..fd49bb2f3c 100644 --- a/mail/em-folder-tree-model.h +++ b/mail/em-folder-tree-model.h @@ -114,6 +114,8 @@ gboolean em_folder_tree_model_get_expanded (EMFolderTreeModel *model, const char void em_folder_tree_model_set_expanded (EMFolderTreeModel *model, const char *key, gboolean expanded); void em_folder_tree_model_save_expanded (EMFolderTreeModel *model); +void em_folder_tree_model_set_unread_count (EMFolderTreeModel *model, CamelStore *store, const char *path, int unread); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/mail/mail-component.c b/mail/mail-component.c index ea3d0e4c73..744ec83ad3 100644 --- a/mail/mail-component.c +++ b/mail/mail-component.c @@ -698,9 +698,8 @@ mail_component_remove_folder (MailComponent *component, CamelStore *store, const EMFolderTreeModel * -mail_component_get_tree_model (MailComponent *component) +mail_component_peek_tree_model (MailComponent *component) { - g_object_ref (component->priv->model); return component->priv->model; } diff --git a/mail/mail-component.h b/mail/mail-component.h index 545ddf11d4..afce0a64d4 100644 --- a/mail/mail-component.h +++ b/mail/mail-component.h @@ -83,7 +83,8 @@ void mail_component_stores_foreach (MailComponent *component, void mail_component_remove_folder (MailComponent *component, CamelStore *store, const char *path); -struct _EMFolderTreeModel *mail_component_get_tree_model (MailComponent *component); +struct _EMFolderTreeModel *mail_component_peek_tree_model (MailComponent *component); + struct _CamelFolder *mail_component_get_local_inbox(MailComponent *mc, struct _CamelException *ex); char *em_uri_from_camel (const char *curi); diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c index 23f6221544..750f9ab30d 100644 --- a/mail/mail-folder-cache.c +++ b/mail/mail-folder-cache.c @@ -45,11 +45,13 @@ #include "mail-folder-cache.h" #include "mail-ops.h" #include "mail-session.h" +#include "mail-component.h" /* For notifications of changes */ #include "mail-vfolder.h" #include "mail-autofilter.h" #include "mail-config.h" +#include "em-folder-tree-model.h" #define w(x) #define d(x) /*(printf("%s(%d):%s: ", __FILE__, __LINE__, __PRETTY_FUNCTION__), (x))*/ @@ -182,10 +184,15 @@ notify_type_changed (GConfClient *client, guint cnxn_id, static void real_flush_updates(void *o, void *event_data, void *data) { + struct _MailComponent *component; + struct _EMFolderTreeModel *model; struct _folder_update *up; struct _store_info *si; time_t now; - + + component = mail_component_peek (); + model = mail_component_peek_tree_model (component); + LOCK(info_lock); while ((up = (struct _folder_update *)e_dlist_remhead(&updates))) { si = g_hash_table_lookup(stores, up->store); @@ -214,6 +221,9 @@ real_flush_updates(void *o, void *event_data, void *data) mail_vfolder_add_uri(up->store, up->uri, FALSE); } + /* update unread counts */ + em_folder_tree_model_set_unread_count (model, up->store, up->path, up->unread); + /* new mail notification */ if (notify_type == -1) { /* need to track the user's new-mail-notification settings... */ -- cgit