diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2011-12-16 23:40:37 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2011-12-16 23:58:54 +0800 |
commit | a9cfed5938aef37d95c009411f965ebc185547c1 (patch) | |
tree | d0c6eb1d5acea6752425169aae47e8f4ed4b55ea /mail/mail-vfolder.c | |
parent | df85cb1b7a47f713cb775f648f735e642a1bb71b (diff) | |
download | gsoc2013-evolution-a9cfed5938aef37d95c009411f965ebc185547c1.tar.gz gsoc2013-evolution-a9cfed5938aef37d95c009411f965ebc185547c1.tar.zst gsoc2013-evolution-a9cfed5938aef37d95c009411f965ebc185547c1.zip |
Avoid passing EMailBackend as much as possible.
More mail API churn... reversing some previous API decisions.
I've made some key API changes to EMailSession on the account-mgmt
branch which should allow for this, and will hopefully also benefit
the "email-factory" branch.
EMailBackend barely needs to exist anymore, except as the owner of
EMailSession.
For several low-level functions, we replace its EMailBackend parameter
with EMailSession and EAlertSink parameters; the latter so it can still
pass user alerts up the chain.
Diffstat (limited to 'mail/mail-vfolder.c')
-rw-r--r-- | mail/mail-vfolder.c | 129 |
1 files changed, 63 insertions, 66 deletions
diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 99caa6c0ec..16a2c48dd1 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -189,7 +189,7 @@ vfolder_setup (EMailSession *session, struct _adduri_msg { MailMsg base; - EMailBackend *backend; + EMailSession *session; gchar *uri; GList *folders; gint remove; @@ -200,16 +200,13 @@ vfolder_adduri_desc (struct _adduri_msg *m) { CamelStore *store; CamelService *service; - EMailSession *session; const gchar *display_name; gchar *folder_name; gchar *description; gboolean success; - session = e_mail_backend_get_session (m->backend); - success = e_mail_folder_uri_parse ( - CAMEL_SESSION (session), m->uri, + CAMEL_SESSION (m->session), m->uri, &store, &folder_name, NULL); if (!success) @@ -234,15 +231,13 @@ vfolder_adduri_exec (struct _adduri_msg *m, GError **error) { GList *l; - EMailSession *session; CamelFolder *folder = NULL; MailFolderCache *folder_cache; if (vfolder_shutdown) return; - session = e_mail_backend_get_session (m->backend); - folder_cache = e_mail_session_get_folder_cache (session); + folder_cache = e_mail_session_get_folder_cache (m->session); /* we dont try lookup the cache if we are removing it, its no longer there */ @@ -256,7 +251,7 @@ vfolder_adduri_exec (struct _adduri_msg *m, if (folder == NULL) folder = e_mail_session_uri_to_folder_sync ( - session, m->uri, 0, cancellable, error); + m->session, m->uri, 0, cancellable, error); if (folder != NULL) { l = m->folders; @@ -280,7 +275,7 @@ vfolder_adduri_done (struct _adduri_msg *m) static void vfolder_adduri_free (struct _adduri_msg *m) { - g_object_unref (m->backend); + g_object_unref (m->session); g_list_foreach (m->folders, (GFunc) g_object_unref, NULL); g_list_free (m->folders); g_free (m->uri); @@ -296,7 +291,7 @@ static MailMsgInfo vfolder_adduri_info = { /* uri should be a camel uri */ static gint -vfolder_adduri (EMailBackend *backend, +vfolder_adduri (EMailSession *session, const gchar *uri, GList *folders, gint remove) @@ -305,7 +300,7 @@ vfolder_adduri (EMailBackend *backend, gint id; m = mail_msg_new (&vfolder_adduri_info); - m->backend = g_object_ref (backend); + m->session = g_object_ref (session); m->folders = folders; m->uri = g_strdup (uri); m->remove = remove; @@ -339,7 +334,6 @@ folder_is_spethal (CamelStore *store, /** * mail_vfolder_add_folder: - * @backend: an #EMailBackend * @store: a #CamelStore * @folder: a folder name * @remove: whether the folder should be removed or added @@ -356,12 +350,12 @@ folder_is_spethal (CamelStore *store, * NOTE: This function must be called from the main thread. */ static void -mail_vfolder_add_folder (EMailBackend *backend, - CamelStore *store, +mail_vfolder_add_folder (CamelStore *store, const gchar *folder_name, gint remove) { - EMailSession *session; + CamelService *service; + CamelSession *session; EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; @@ -370,9 +364,13 @@ mail_vfolder_add_folder (EMailBackend *backend, gint remote; gchar *uri; - session = e_mail_backend_get_session (backend); + g_return_if_fail (CAMEL_IS_STORE (store)); + g_return_if_fail (folder_name != NULL); + + service = CAMEL_SERVICE (store); + session = camel_service_get_session (service); + provider = camel_service_get_provider (service); - provider = camel_service_get_provider (CAMEL_SERVICE (store)); remote = (provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0; if (folder_is_spethal (store, folder_name)) @@ -410,8 +408,7 @@ mail_vfolder_add_folder (EMailBackend *backend, source = NULL; while (!found && (source = em_vfolder_rule_next_source ( (EMVFolderRule *) rule, source))) { - found = e_mail_folder_uri_equal ( - CAMEL_SESSION (session), uri, source); + found = e_mail_folder_uri_equal (session, uri, source); } if (found) { @@ -429,7 +426,9 @@ done: G_UNLOCK (vfolder); if (folders != NULL) - vfolder_adduri (backend, uri, folders, remove); + vfolder_adduri ( + E_MAIL_SESSION (session), + uri, folders, remove); g_free (uri); } @@ -459,7 +458,8 @@ mail_vfolder_delete_folder (EMailBackend *backend, { ERuleContext *rule_context; EFilterRule *rule; - EMailSession *session; + CamelService *service; + CamelSession *session; const gchar *source; CamelVeeFolder *vf; GString *changed; @@ -477,7 +477,9 @@ mail_vfolder_delete_folder (EMailBackend *backend, g_return_if_fail (mail_in_main_thread ()); - session = e_mail_backend_get_session (backend); + service = CAMEL_SERVICE (store); + session = camel_service_get_session (service); + uri = e_mail_folder_uri_build (store, folder_name); changed_count = 0; @@ -502,7 +504,7 @@ mail_vfolder_delete_folder (EMailBackend *backend, while ((source = em_vfolder_rule_next_source (vf_rule, source))) { /* Remove all sources that match, ignore changed events though * because the adduri call above does the work async */ - if (e_mail_folder_uri_equal (CAMEL_SESSION (session), uri, source)) { + if (e_mail_folder_uri_equal (session, uri, source)) { vf = g_hash_table_lookup ( vfolder_hash, rule->name); @@ -544,9 +546,12 @@ done: G_UNLOCK (vfolder); if (changed_count > 0) { + EAlertSink *alert_sink; const gchar *config_dir; gchar *user, *info; + alert_sink = e_mail_backend_get_alert_sink (backend); + info = g_strdup_printf (ngettext ( /* Translators: The first %s is name of the affected * search folder(s), the second %s is the URI of the @@ -558,8 +563,8 @@ done: "The following Search Folders\n%s have been modified " "to account for the deleted folder\n\"%s\".", changed_count), changed->str, uri); - e_mail_backend_submit_alert ( - backend, "mail:vfolder-updated", info, NULL); + e_alert_submit ( + alert_sink, "mail:vfolder-updated", info, NULL); g_free (info); config_dir = mail_session_get_config_dir (); @@ -583,6 +588,7 @@ mail_vfolder_rename_folder (CamelStore *store, EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; + CamelService *service; CamelSession *session; gint changed = 0; gchar *old_uri; @@ -601,7 +607,8 @@ mail_vfolder_rename_folder (CamelStore *store, g_return_if_fail (mail_in_main_thread ()); - session = camel_service_get_session (CAMEL_SERVICE (store)); + service = CAMEL_SERVICE (store); + session = camel_service_get_session (service); old_uri = e_mail_folder_uri_build (store, old_folder_name); new_uri = e_mail_folder_uri_build (store, new_folder_name); @@ -702,7 +709,6 @@ static void rule_changed (EFilterRule *rule, CamelFolder *folder) { - EMailBackend *backend; EMailSession *session; CamelService *service; GList *sources_uri = NULL; @@ -711,8 +717,7 @@ rule_changed (EFilterRule *rule, const gchar *full_name; full_name = camel_folder_get_full_name (folder); - backend = em_vfolder_rule_get_backend (EM_VFOLDER_RULE (rule)); - session = e_mail_backend_get_session (backend); + session = em_vfolder_rule_get_session (EM_VFOLDER_RULE (rule)); service = camel_session_get_service ( CAMEL_SESSION (session), E_MAIL_SESSION_VFOLDER_UID); @@ -804,15 +809,13 @@ 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); + session = em_vfolder_rule_get_session (EM_VFOLDER_RULE (rule)); service = camel_session_get_service ( CAMEL_SESSION (session), E_MAIL_SESSION_VFOLDER_UID); @@ -837,15 +840,13 @@ 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); + session = em_vfolder_rule_get_session (EM_VFOLDER_RULE (rule)); service = camel_session_get_service ( CAMEL_SESSION (session), E_MAIL_SESSION_VFOLDER_UID); @@ -963,19 +964,17 @@ store_folder_renamed_cb (CamelStore *store, static void folder_available_cb (MailFolderCache *cache, CamelStore *store, - const gchar *folder_name, - EMailBackend *backend) + const gchar *folder_name) { - mail_vfolder_add_folder (backend, store, folder_name, FALSE); + mail_vfolder_add_folder (store, folder_name, FALSE); } static void folder_unavailable_cb (MailFolderCache *cache, CamelStore *store, - const gchar *folder_name, - EMailBackend *backend) + const gchar *folder_name) { - mail_vfolder_add_folder (backend, store, folder_name, TRUE); + mail_vfolder_add_folder (store, folder_name, TRUE); } static void @@ -1032,7 +1031,7 @@ vfolder_load_storage (EMailBackend *backend) g_signal_connect ( vfolder_store, "folder-deleted", - G_CALLBACK (store_folder_deleted_cb), backend); + G_CALLBACK (store_folder_deleted_cb), NULL); g_signal_connect ( vfolder_store, "folder-renamed", @@ -1040,7 +1039,7 @@ vfolder_load_storage (EMailBackend *backend) /* load our rules */ user = g_build_filename (config_dir, "vfolders.xml", NULL); - context = em_vfolder_context_new (backend); + context = em_vfolder_context_new (session); xmlfile = g_build_filename (EVOLUTION_PRIVDATADIR, "vfoldertypes.xml", NULL); if (e_rule_context_load ((ERuleContext *) context, @@ -1077,10 +1076,10 @@ vfolder_load_storage (EMailBackend *backend) g_signal_connect ( folder_cache, "folder-available", - G_CALLBACK (folder_available_cb), backend); + G_CALLBACK (folder_available_cb), NULL); g_signal_connect ( folder_cache, "folder-unavailable", - G_CALLBACK (folder_unavailable_cb), backend); + G_CALLBACK (folder_unavailable_cb), NULL); g_signal_connect ( folder_cache, "folder-deleted", G_CALLBACK (folder_deleted_cb), backend); @@ -1090,32 +1089,28 @@ vfolder_load_storage (EMailBackend *backend) } void -vfolder_edit (EShellView *shell_view) +vfolder_edit (EMailBackend *backend, + GtkWindow *parent_window) { EShellBackend *shell_backend; - EShellWindow *shell_window; - EMailBackend *backend; GtkWidget *dialog; const gchar *config_dir; gchar *filename; - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - - shell_backend = e_shell_view_get_shell_backend (shell_view); - shell_window = e_shell_view_get_shell_window (shell_view); + g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (GTK_IS_WINDOW (parent_window)); + shell_backend = E_SHELL_BACKEND (backend); config_dir = e_shell_backend_get_config_dir (shell_backend); filename = g_build_filename (config_dir, "vfolders.xml", NULL); - backend = E_MAIL_BACKEND (shell_backend); - vfolder_load_storage (backend); dialog = em_vfolder_editor_new (context); gtk_window_set_title ( GTK_WINDOW (dialog), _("Search Folders")); gtk_window_set_transient_for ( - GTK_WINDOW (dialog), GTK_WINDOW (shell_window)); + GTK_WINDOW (dialog), parent_window); switch (gtk_dialog_run (GTK_DIALOG (dialog))) { case GTK_RESPONSE_OK: @@ -1151,21 +1146,20 @@ vfolder_edit_response_cb (GtkWidget *dialog, } void -vfolder_edit_rule (EMailBackend *backend, - const gchar *folder_uri) +vfolder_edit_rule (EMailSession *session, + const gchar *folder_uri, + EAlertSink *alert_sink) { GtkWidget *dialog; GtkWidget *widget; GtkWidget *container; EFilterRule *rule = NULL; EFilterRule *newrule; - EMailSession *session; gchar *folder_name = NULL; - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (folder_uri != NULL); - - session = e_mail_backend_get_session (backend); + g_return_if_fail (E_IS_ALERT_SINK (alert_sink)); e_mail_folder_uri_parse ( CAMEL_SESSION (session), folder_uri, @@ -1179,8 +1173,9 @@ vfolder_edit_rule (EMailBackend *backend, if (rule == NULL) { /* TODO: we should probably just create it ... */ - e_mail_backend_submit_alert ( - backend, "mail:vfolder-notexist", folder_uri, NULL); + e_alert_submit ( + alert_sink, "mail:vfolder-notexist", + folder_uri, NULL); return; } @@ -1265,13 +1260,15 @@ new_rule_changed_cb (EFilterRule *rule, /* clones a filter/search rule into a matching vfolder rule * (assuming the same system definitions) */ EFilterRule * -vfolder_clone_rule (EMailBackend *backend, +vfolder_clone_rule (EMailSession *session, EFilterRule *in) { EFilterRule *rule; xmlNodePtr xml; - rule = em_vfolder_rule_new (backend); + g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL); + + rule = em_vfolder_rule_new (session); xml = e_filter_rule_xml_encode (in); e_filter_rule_xml_decode (rule, xml, (ERuleContext *) context); |