From 63b393f318dd89330466e48f15396ae44f2cd7ea Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 7 Dec 2011 11:05:26 -0500 Subject: Remove 'vfolder_store' global variable. Fetch the CamelService by its UID ("vfolder") as needed. --- mail/mail-vfolder.c | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 80d6f1ec0c..e30fd0a328 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -52,10 +52,11 @@ #include "e-mail-local.h" #include "e-mail-store.h" +#define VFOLDER_SERVICE_UID "vfolder" + #define d(x) /* (printf("%s:%s: ", G_STRLOC, G_STRFUNC), (x))*/ static EMVFolderContext *context; /* context remains open all time */ -CamelStore *vfolder_store; /* the 1 static vfolder store */ /* lock for accessing shared resources (below) */ G_LOCK_DEFINE_STATIC (vfolder); @@ -778,6 +779,7 @@ rule_changed (EFilterRule *rule, { EMailBackend *backend; EMailSession *session; + CamelService *service; GList *sources_uri = NULL, *sources_folder = NULL; GString *query; const gchar *full_name; @@ -786,6 +788,10 @@ rule_changed (EFilterRule *rule, backend = em_vfolder_rule_get_backend (EM_VFOLDER_RULE (rule)); session = e_mail_backend_get_session (backend); + service = camel_session_get_service ( + CAMEL_SESSION (session), VFOLDER_SERVICE_UID); + g_return_if_fail (CAMEL_IS_SERVICE (service)); + /* if the folder has changed name, then add it, then remove the old manually */ if (strcmp (full_name, rule->name) != 0) { gchar *oldname; @@ -808,7 +814,8 @@ rule_changed (EFilterRule *rule, oldname = g_strdup (full_name); /* FIXME Not passing a GCancellable or GError. */ camel_store_rename_folder_sync ( - vfolder_store, oldname, rule->name, NULL, NULL); + CAMEL_STORE (service), + oldname, rule->name, NULL, NULL); g_free (oldname); } @@ -848,14 +855,24 @@ static void context_rule_added (ERuleContext *ctx, EFilterRule *rule) { + EMailBackend *backend; + EMailSession *session; CamelFolder *folder; + CamelService *service; d(printf("rule added: %s\n", rule->name)); + backend = em_vfolder_rule_get_backend (EM_VFOLDER_RULE (rule)); + session = e_mail_backend_get_session (backend); + + service = camel_session_get_service ( + CAMEL_SESSION (session), VFOLDER_SERVICE_UID); + g_return_if_fail (CAMEL_IS_SERVICE (service)); + /* this always runs quickly */ /* FIXME Not passing a GCancellable or GError. */ folder = camel_store_get_folder_sync ( - vfolder_store, rule->name, 0, NULL, NULL); + CAMEL_STORE (service), rule->name, 0, NULL, NULL); if (folder) { g_signal_connect (rule, "changed", G_CALLBACK(rule_changed), folder); @@ -871,10 +888,20 @@ static void context_rule_removed (ERuleContext *ctx, EFilterRule *rule) { + EMailBackend *backend; + EMailSession *session; + CamelService *service; gpointer key, folder = NULL; d(printf("rule removed; %s\n", rule->name)); + backend = em_vfolder_rule_get_backend (EM_VFOLDER_RULE (rule)); + session = e_mail_backend_get_session (backend); + + service = camel_session_get_service ( + CAMEL_SESSION (session), VFOLDER_SERVICE_UID); + g_return_if_fail (CAMEL_IS_SERVICE (service)); + /* TODO: remove from folder info cache? */ G_LOCK (vfolder); @@ -886,7 +913,7 @@ context_rule_removed (ERuleContext *ctx, /* FIXME Not passing a GCancellable or GError. */ camel_store_delete_folder_sync ( - vfolder_store, rule->name, NULL, NULL); + CAMEL_STORE (service), rule->name, NULL, NULL); /* this must be unref'd after its deleted */ if (folder) g_object_unref ((CamelFolder *) folder); @@ -1068,8 +1095,6 @@ vfolder_load_storage (EMailBackend *backend) g_return_if_fail (CAMEL_IS_STORE (service)); - vfolder_store = CAMEL_STORE (service); - g_signal_connect ( service, "folder-deleted", G_CALLBACK (store_folder_deleted_cb), backend); @@ -1098,7 +1123,7 @@ vfolder_load_storage (EMailBackend *backend) G_CALLBACK (context_rule_removed), context); /* load store to mail component */ - e_mail_store_add (session, vfolder_store); + e_mail_store_add (session, CAMEL_STORE (service)); /* and setup the rules we have */ rule = NULL; @@ -1432,11 +1457,6 @@ mail_vfolder_shutdown (void) vfolder_hash = NULL; } - if (vfolder_store) { - g_object_unref (vfolder_store); - vfolder_store = NULL; - } - if (context) { g_object_unref (context); context = NULL; -- cgit v1.2.3