aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-11-19 23:04:45 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-11-20 03:50:56 +0800
commitba85b310f1a1df61709080d9361b178614bca1fb (patch)
treec9aa0d3a57d830c8520d9ef3284aa3324f20aff5 /mail
parentd43e7ac92af0ac35c86e874279e6439df7ecc4e0 (diff)
downloadgsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.tar
gsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.tar.gz
gsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.tar.bz2
gsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.tar.lz
gsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.tar.xz
gsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.tar.zst
gsoc2013-evolution-ba85b310f1a1df61709080d9361b178614bca1fb.zip
Change em_folder_tree_model_set_folder_info() argument.
Take a CamelStore instead of an EMFolderTreeModelStoreInfo. It imposes a few extra hash table lookups to reacquire the StoreInfo from a CamelStore while populating the folder tree, but that's fine. Working toward making the EMFolderTreeModelStoreInfo struct private to EMFolderTreeModel, so it can then be made thread-safe.
Diffstat (limited to 'mail')
-rw-r--r--mail/em-folder-tree-model.c31
-rw-r--r--mail/em-folder-tree-model.h2
-rw-r--r--mail/em-folder-tree.c14
3 files changed, 25 insertions, 22 deletions
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index bbf1824297..4092fe1463 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -678,10 +678,11 @@ folder_tree_model_get_sent_folder_uri (ESourceRegistry *registry,
void
em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
GtkTreeIter *iter,
- EMFolderTreeModelStoreInfo *si,
+ CamelStore *store,
CamelFolderInfo *fi,
gint fully_loaded)
{
+ EMFolderTreeModelStoreInfo *si;
GtkTreeRowReference *path_row;
GtkTreeStore *tree_store;
MailFolderCache *folder_cache;
@@ -704,6 +705,14 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
gboolean store_is_local;
gchar *uri;
+ g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
+ g_return_if_fail (iter != NULL);
+ g_return_if_fail (CAMEL_IS_STORE (store));
+ g_return_if_fail (fi != NULL);
+
+ si = g_hash_table_lookup (model->priv->store_index, store);
+ g_return_if_fail (si != NULL);
+
/* Make sure we don't already know about it. */
if (g_hash_table_lookup (si->full_hash, fi->full_name))
return;
@@ -714,7 +723,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
folder_cache = e_mail_session_get_folder_cache (session);
registry = e_mail_session_get_registry (session);
- uid = camel_service_get_uid (CAMEL_SERVICE (si->store));
+ uid = camel_service_get_uid (CAMEL_SERVICE (store));
store_is_local = (g_strcmp0 (uid, E_MAIL_SESSION_LOCAL_UID) == 0);
if (!fully_loaded)
@@ -725,7 +734,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
path_row = gtk_tree_row_reference_new (GTK_TREE_MODEL (model), path);
gtk_tree_path_free (path);
- uri = e_mail_folder_uri_build (si->store, fi->full_name);
+ uri = e_mail_folder_uri_build (store, fi->full_name);
g_hash_table_insert (
si->full_hash, g_strdup (fi->full_name), path_row);
@@ -737,7 +746,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
* be functionised. */
unread = fi->unread;
folder = mail_folder_cache_ref_folder (
- folder_cache, si->store, fi->full_name);
+ folder_cache, store, fi->full_name);
if (folder != NULL) {
folder_is_drafts = em_utils_folder_is_drafts (registry, folder);
folder_is_outbox = em_utils_folder_is_outbox (registry, folder);
@@ -788,10 +797,10 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
gchar *sent_folder_uri;
folder_tree_model_get_drafts_folder_uri (
- registry, si->store, &drafts_folder_uri);
+ registry, store, &drafts_folder_uri);
folder_tree_model_get_sent_folder_uri (
- registry, si->store, &sent_folder_uri);
+ registry, store, &sent_folder_uri);
if (!folder_is_drafts && drafts_folder_uri != NULL) {
folder_is_drafts = e_mail_folder_uri_equal (
@@ -824,7 +833,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
gtk_tree_store_set (
tree_store, iter,
COL_STRING_DISPLAY_NAME, display_name,
- COL_OBJECT_CAMEL_STORE, si->store,
+ COL_OBJECT_CAMEL_STORE, store,
COL_STRING_FULL_NAME, fi->full_name,
COL_STRING_ICON_NAME, icon_name,
COL_UINT_FLAGS, flags,
@@ -856,7 +865,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
gtk_tree_store_set (
tree_store, &sub,
COL_STRING_DISPLAY_NAME, _("Loading..."),
- COL_OBJECT_CAMEL_STORE, si->store,
+ COL_OBJECT_CAMEL_STORE, store,
COL_STRING_FULL_NAME, NULL,
COL_STRING_ICON_NAME, NULL,
COL_BOOL_LOAD_SUBDIRS, FALSE,
@@ -890,7 +899,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
}
em_folder_tree_model_set_folder_info (
- model, &sub, si, fi, fully_loaded);
+ model, &sub, store, fi, fully_loaded);
fi = fi->next;
} while (fi);
}
@@ -950,7 +959,7 @@ folder_tree_model_folder_subscribed_cb (CamelStore *store,
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent);
- em_folder_tree_model_set_folder_info (model, &iter, si, fi, TRUE);
+ em_folder_tree_model_set_folder_info (model, &iter, store, fi, TRUE);
}
static void
@@ -1062,7 +1071,7 @@ folder_tree_model_folder_renamed_cb (CamelStore *store,
gtk_tree_path_free (path);
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &root);
- em_folder_tree_model_set_folder_info (model, &iter, si, info, TRUE);
+ em_folder_tree_model_set_folder_info (model, &iter, store, info, TRUE);
}
static void
diff --git a/mail/em-folder-tree-model.h b/mail/em-folder-tree-model.h
index af5fbe1dc7..d33b385aab 100644
--- a/mail/em-folder-tree-model.h
+++ b/mail/em-folder-tree-model.h
@@ -126,7 +126,7 @@ void em_folder_tree_model_set_session
void em_folder_tree_model_set_folder_info
(EMFolderTreeModel *model,
GtkTreeIter *iter,
- EMFolderTreeModelStoreInfo *si,
+ CamelStore *store,
CamelFolderInfo *fi,
gint fully_loaded);
void em_folder_tree_model_add_store
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index 3406a6aae9..f7e7afd197 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -205,7 +205,6 @@ folder_tree_get_folder_info_cb (CamelStore *store,
GAsyncResult *result,
AsyncContext *context)
{
- struct _EMFolderTreeModelStoreInfo *si;
CamelFolderInfo *folder_info;
CamelFolderInfo *child_info;
EAlertSink *alert_sink;
@@ -281,12 +280,6 @@ folder_tree_get_folder_info_cb (CamelStore *store,
* subscribed to any folders yet, folder_info may legitimately be
* NULL at this point. We handle that case below. Proceed. */
- /* Check if the store has been removed. */
- si = em_folder_tree_model_lookup_store_info (
- EM_FOLDER_TREE_MODEL (model), store);
- if (si == NULL)
- goto exit;
-
/* Make sure we still need to load the tree subfolders. */
iter_is_placeholder = FALSE;
@@ -353,8 +346,9 @@ folder_tree_get_folder_info_cb (CamelStore *store,
GtkTreeRowReference *reference;
/* Check if we already have this row cached. */
- reference = g_hash_table_lookup (
- si->full_hash, child_info->full_name);
+ reference = em_folder_tree_model_get_row_reference (
+ EM_FOLDER_TREE_MODEL (model),
+ store, child_info->full_name);
if (reference == NULL) {
/* If we're on a placeholder row, reuse
@@ -368,7 +362,7 @@ folder_tree_get_folder_info_cb (CamelStore *store,
em_folder_tree_model_set_folder_info (
EM_FOLDER_TREE_MODEL (model),
- &iter, si, child_info, TRUE);
+ &iter, store, child_info, TRUE);
}
child_info = child_info->next;