From 85fd7a2026a704aa6814c859517b04c62b8459cd Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 29 Nov 2010 17:41:56 +0100 Subject: Ensure vFolders are enabled when invoking Edit->Search Folders --- mail/mail-vfolder.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 8a3012e095..89716ffaf8 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1209,6 +1209,8 @@ vfolder_edit (EShellView *shell_view) backend = E_MAIL_BACKEND (shell_backend); session = e_mail_backend_get_session (backend); + vfolder_load_storage (backend); + dialog = em_vfolder_editor_new (context); gtk_window_set_title ( GTK_WINDOW (dialog), _("Search Folders")); -- cgit v1.2.3 From 2e68a6a74d19d4cda574fd09fd2cbf951a21916d Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 19 Jan 2011 12:10:56 +0100 Subject: Bug #633982 - Crash when trying to Create a search folder from a search --- mail/mail-vfolder.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 89716ffaf8..7f22198973 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1347,13 +1347,11 @@ vfolder_create_part (const gchar *name) /* clones a filter/search rule into a matching vfolder rule (assuming the same system definitions) */ EFilterRule * -vfolder_clone_rule (EFilterRule *in) +vfolder_clone_rule (EMailSession *session, EFilterRule *in) { - EMailSession *session; EFilterRule *rule; xmlNodePtr xml; - session = em_vfolder_rule_get_session (EM_VFOLDER_RULE (in)); rule = em_vfolder_rule_new (session); xml = e_filter_rule_xml_encode (in); -- cgit v1.2.3 From 0364d4192bde55cb2d834db4e8eab05aa8f7d389 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 27 Jan 2011 17:39:36 +0100 Subject: Bug #640704 - Replace GtkWindow::allow_shrink/grow with resizable --- mail/mail-vfolder.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 7f22198973..3629de1a4b 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1281,7 +1281,7 @@ vfolder_edit_rule (EMailBackend *backend, gtk_box_set_spacing (GTK_BOX (container), 6); gtk_dialog_set_default_response (gd, GTK_RESPONSE_OK); - g_object_set(gd, "allow_shrink", FALSE, "allow_grow", TRUE, NULL); + g_object_set (gd, "resizable", TRUE, NULL); gtk_window_set_default_size (GTK_WINDOW (gd), 500, 500); gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); gtk_widget_show ((GtkWidget *)gd); @@ -1387,7 +1387,7 @@ vfolder_gui_add_rule (EMVFolderRule *rule) container = gtk_dialog_get_content_area (gd); gtk_box_set_spacing (GTK_BOX (container), 6); - g_object_set(gd, "allow_shrink", FALSE, "allow_grow", TRUE, NULL); + g_object_set (gd, "resizable", TRUE, NULL); gtk_window_set_default_size (GTK_WINDOW (gd), 500, 500); gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); gtk_widget_show ((GtkWidget *)gd); -- cgit v1.2.3 From 6af0c53b697c6981c1470c177b2c37e081635258 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 29 Jan 2011 10:50:53 -0500 Subject: Coding style and whitespace cleanup. --- mail/mail-vfolder.c | 85 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 25 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 3629de1a4b..9c8b87506f 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -262,7 +262,9 @@ vfolder_adduri_exec (struct _adduri_msg *m, if (!m->remove && !mail_folder_cache_get_folder_from_uri (folder_cache, m->uri, &folder)) { - g_warning("Folder '%s' disappeared while I was adding/remove it to/from my vfolder", m->uri); + g_warning ( + "Folder '%s' disappeared while I was " + "adding/removing it to/from my vfolder", m->uri); return; } @@ -463,10 +465,13 @@ mail_vfolder_add_uri (EMailSession *session, const gchar *source; CamelVeeFolder *vf; GList *folders = NULL, *link; - gint remote = (((CamelService *)store)->provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0; + gint remote; gint is_ignore; gchar *uri; + remote = (((CamelService *)store)->provider->flags & + CAMEL_PROVIDER_IS_REMOTE) != 0; + uri = em_uri_from_camel (curi); if (uri_is_spethal (store, curi)) { g_free (uri); @@ -518,7 +523,8 @@ mail_vfolder_add_uri (EMailSession *session, d(printf("invalid rule (%p): rule->name is set to NULL\n", rule)); continue; } - /* dont auto-add any sent/drafts folders etc, they must be explictly listed as a source */ + /* Don't auto-add any sent/drafts folders etc, + * they must be explictly listed as a source. */ if (rule->source && !is_ignore && ((((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL && !remote) @@ -527,7 +533,8 @@ mail_vfolder_add_uri (EMailSession *session, found = TRUE; source = NULL; - while (!found && (source = em_vfolder_rule_next_source ((EMVFolderRule *)rule, source))) { + while (!found && (source = em_vfolder_rule_next_source ( + (EMVFolderRule *)rule, source))) { gchar *csource; csource = em_uri_to_camel (source); found = camel_store_folder_uri_equal (store, curi, csource); @@ -663,8 +670,10 @@ mail_vfolder_delete_uri (EMailBackend *backend, g_warning ("vf is NULL for %s\n", rule->name); continue; } - g_signal_handlers_disconnect_matched (rule, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, 0, - 0, NULL, rule_changed, vf); + g_signal_handlers_disconnect_matched ( + rule, G_SIGNAL_MATCH_FUNC | + G_SIGNAL_MATCH_DATA, 0, 0, NULL, + rule_changed, vf); em_vfolder_rule_remove_source ((EMVFolderRule *)rule, source); g_signal_connect (rule, "changed", G_CALLBACK(rule_changed), vf); if (changed_count == 0) { @@ -758,14 +767,15 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto /* Remove all sources that match, ignore changed events though because the adduri call above does the work async */ if (camel_store_folder_uri_equal (store, cfrom, csource)) { - d(printf("Vfolder '%s' used '%s' ('%s') now uses '%s'\n", rule->name, source, from, to)); vf = g_hash_table_lookup (vfolder_hash, rule->name); if (!vf) { g_warning ("vf is NULL for %s\n", rule->name); continue; } - g_signal_handlers_disconnect_matched (rule, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, 0, - 0, NULL, rule_changed, vf); + g_signal_handlers_disconnect_matched ( + rule, G_SIGNAL_MATCH_FUNC | + G_SIGNAL_MATCH_DATA, 0, 0, NULL, + rule_changed, vf); em_vfolder_rule_remove_source ((EMVFolderRule *)rule, source); em_vfolder_rule_add_source ((EMVFolderRule *)rule, to); g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), vf); @@ -885,11 +895,17 @@ rule_changed (EFilterRule *rule, CamelFolder *folder) &sources_folder, &sources_uri); G_LOCK (vfolder); - if (((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL || ((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) + if (((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_LOCAL || + ((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) rule_add_sources ( session, source_folders_local, &sources_folder, &sources_uri); - if (((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE || ((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) + if (((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE || + ((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) rule_add_sources ( session, source_folders_remote, &sources_folder, &sources_uri); @@ -970,9 +986,11 @@ store_folder_deleted_cb (CamelStore *store, if (rule) { const gchar *config_dir; - /* We need to stop listening to removed events, otherwise we'll try and remove it again */ - g_signal_handlers_disconnect_matched (context, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, 0, - 0, NULL, context_rule_removed, context); + /* We need to stop listening to removed events, + * otherwise we'll try and remove it again. */ + g_signal_handlers_disconnect_matched ( + context, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, + 0, 0, NULL, context_rule_removed, context); e_rule_context_remove_rule ((ERuleContext *)context, rule); g_object_unref (rule); g_signal_connect(context, "rule_removed", G_CALLBACK(context_rule_removed), context); @@ -1019,8 +1037,9 @@ store_folder_renamed_cb (CamelStore *store, return; } - g_signal_handlers_disconnect_matched (rule, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, 0, - 0, NULL, rule_changed, folder); + g_signal_handlers_disconnect_matched ( + rule, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, + 0, 0, NULL, rule_changed, folder); e_filter_rule_set_name (rule, info->full_name); g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), folder); @@ -1064,7 +1083,11 @@ folder_deleted_cb (MailFolderCache *cache, } static void -folder_renamed_cb (MailFolderCache *cache, CamelStore *store, const gchar *olduri, const gchar *newuri, gpointer user_data) +folder_renamed_cb (MailFolderCache *cache, + CamelStore *store, + const gchar *olduri, + const gchar *newuri, + gpointer user_data) { mail_vfolder_rename_uri (store, olduri, newuri); } @@ -1075,6 +1098,7 @@ vfolder_load_storage (EMailBackend *backend) /* lock for loading storage, it is safe to call it more than once */ G_LOCK_DEFINE_STATIC (vfolder_hash); + const gchar *key; const gchar *data_dir; const gchar *config_dir; gchar *user, *storeuri; @@ -1154,8 +1178,9 @@ vfolder_load_storage (EMailBackend *backend) /* reenable the feature if required */ client = gconf_client_get_default (); - if (!gconf_client_get_bool (client, "/apps/evolution/mail/display/enable_vfolders", NULL)) - gconf_client_set_bool (client, "/apps/evolution/mail/display/enable_vfolders", TRUE, NULL); + key = "/apps/evolution/mail/display/enable_vfolders"; + if (!gconf_client_get_bool (client, key, NULL)) + gconf_client_set_bool (client, key, TRUE, NULL); g_object_unref (client); folder_cache = e_mail_session_get_folder_cache (session); @@ -1263,7 +1288,8 @@ vfolder_edit_rule (EMailBackend *backend, url = camel_url_new (uri, NULL); if (url && url->fragment - && (rule = e_rule_context_find_rule ((ERuleContext *)context, url->fragment, NULL))) { + && (rule = e_rule_context_find_rule ( + (ERuleContext *) context, url->fragment, NULL))) { g_object_ref (G_OBJECT (rule)); newrule = e_filter_rule_clone (rule); @@ -1285,9 +1311,15 @@ vfolder_edit_rule (EMailBackend *backend, gtk_window_set_default_size (GTK_WINDOW (gd), 500, 500); gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); gtk_widget_show ((GtkWidget *)gd); - g_object_set_data_full(G_OBJECT(gd), "rule", newrule, (GDestroyNotify)g_object_unref); - g_object_set_data_full(G_OBJECT(gd), "orig", rule, (GDestroyNotify)g_object_unref); - g_signal_connect(gd, "response", G_CALLBACK(edit_rule_response), NULL); + g_object_set_data_full ( + G_OBJECT (gd), "rule", newrule, + (GDestroyNotify) g_object_unref); + g_object_set_data_full ( + G_OBJECT (gd), "orig", rule, + (GDestroyNotify) g_object_unref); + g_signal_connect ( + gd, "response", + G_CALLBACK (edit_rule_response), NULL); gtk_widget_show ((GtkWidget *)gd); } else { /* TODO: we should probably just create it ... */ @@ -1315,7 +1347,9 @@ new_rule_clicked (GtkWidget *w, gint button, gpointer data) } if (e_rule_context_find_rule ((ERuleContext *)context, rule->name, rule->source)) { - e_alert_run_dialog_for_args ((GtkWindow *)w, "mail:vfolder-notunique", rule->name, NULL); + e_alert_run_dialog_for_args ( + GTK_WINDOW (w), "mail:vfolder-notunique", + rule->name, NULL); return; } @@ -1345,7 +1379,8 @@ vfolder_create_part (const gchar *name) return e_rule_context_create_part ((ERuleContext *)context, name); } -/* clones a filter/search rule into a matching vfolder rule (assuming the same system definitions) */ +/* clones a filter/search rule into a matching vfolder rule + * (assuming the same system definitions) */ EFilterRule * vfolder_clone_rule (EMailSession *session, EFilterRule *in) { -- cgit v1.2.3 From 8efc1bc6f91e06ca61b00eb8119c9c36697e43a6 Mon Sep 17 00:00:00 2001 From: Kjartan Maraas Date: Tue, 8 Feb 2011 11:57:50 -0500 Subject: Bug 641756 - Fix warnings from GCC 4.6 GCC learned how to find dead assignments. --- mail/mail-vfolder.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 9c8b87506f..5c349e20d7 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1218,7 +1218,6 @@ vfolder_edit (EShellView *shell_view) EShellBackend *shell_backend; EShellWindow *shell_window; EMailBackend *backend; - EMailSession *session; GtkWidget *dialog; const gchar *config_dir; gchar *filename; @@ -1232,7 +1231,6 @@ vfolder_edit (EShellView *shell_view) filename = g_build_filename (config_dir, "vfolders.xml", NULL); backend = E_MAIL_BACKEND (shell_backend); - session = e_mail_backend_get_session (backend); vfolder_load_storage (backend); @@ -1400,13 +1398,10 @@ vfolder_clone_rule (EMailSession *session, EFilterRule *in) void vfolder_gui_add_rule (EMVFolderRule *rule) { - EMailSession *session; GtkWidget *w; GtkDialog *gd; GtkWidget *container; - session = em_vfolder_rule_get_session (rule); - w = e_filter_rule_get_widget ((EFilterRule *)rule, (ERuleContext *)context); gd = (GtkDialog *)gtk_dialog_new_with_buttons ( -- cgit v1.2.3 From f31b492945408f038ae16a099900631ae9714912 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 17 Apr 2011 13:13:55 -0400 Subject: Adapt to sealed up CamelService. --- mail/mail-vfolder.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 5c349e20d7..b0ac26792c 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -464,13 +464,14 @@ mail_vfolder_add_uri (EMailSession *session, EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; + CamelProvider *provider; GList *folders = NULL, *link; gint remote; gint is_ignore; gchar *uri; - remote = (((CamelService *)store)->provider->flags & - CAMEL_PROVIDER_IS_REMOTE) != 0; + provider = camel_service_get_provider (CAMEL_SERVICE (store)); + remote = (provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0; uri = em_uri_from_camel (curi); if (uri_is_spethal (store, curi)) { -- cgit v1.2.3 From 0be9b1f878c2f54a0c7f2f5024125813022d81b1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 20 Apr 2011 19:06:35 -0400 Subject: Adapt to CamelService changes. --- mail/mail-vfolder.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index b0ac26792c..aa13589ab2 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1099,6 +1099,7 @@ vfolder_load_storage (EMailBackend *backend) /* lock for loading storage, it is safe to call it more than once */ G_LOCK_DEFINE_STATIC (vfolder_hash); + CamelService *service; const gchar *key; const gchar *data_dir; const gchar *config_dir; @@ -1129,23 +1130,28 @@ vfolder_load_storage (EMailBackend *backend) /* first, create the vfolder store, and set it up */ storeuri = g_strdup_printf("vfolder:%s/vfolder", data_dir); - vfolder_store = camel_session_get_store ( - CAMEL_SESSION (session), storeuri, NULL); - if (vfolder_store == NULL) { + service = camel_session_add_service ( + CAMEL_SESSION (session), "vfolder", + storeuri, CAMEL_PROVIDER_STORE, NULL); + if (service != NULL) + camel_service_connect_sync (service, NULL); + else { g_warning("Cannot open vfolder store - no vfolders available"); return; } + g_return_if_fail (CAMEL_IS_STORE (service)); + + vfolder_store = CAMEL_STORE (service); + g_signal_connect ( - vfolder_store, "folder-deleted", + service, "folder-deleted", G_CALLBACK (store_folder_deleted_cb), backend); g_signal_connect ( - vfolder_store, "folder-renamed", + service, "folder-renamed", G_CALLBACK (store_folder_renamed_cb), NULL); - d(printf("got store '%s' = %p\n", storeuri, vfolder_store)); - /* load our rules */ user = g_build_filename (config_dir, "vfolders.xml", NULL); context = em_vfolder_context_new (session); @@ -1162,7 +1168,7 @@ vfolder_load_storage (EMailBackend *backend) g_signal_connect(context, "rule_removed", G_CALLBACK(context_rule_removed), context); /* load store to mail component */ - e_mail_store_add_by_uri (session, storeuri, _("Search Folders")); + e_mail_store_add (session, vfolder_store, _("Search Folders")); /* and setup the rules we have */ rule = NULL; -- cgit v1.2.3 From 59958c9906eade7264d8564e5448c2b1bea2503d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 07:06:10 -0400 Subject: Replace camel_store_folder_uri_equal() with e_mail_folder_uri_equal(). --- mail/mail-vfolder.c | 65 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 27 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index aa13589ab2..0f98528d16 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -35,6 +35,7 @@ #include "e-mail-backend.h" #include "e-mail-session.h" +#include "e-mail-folder-utils.h" #include "em-folder-tree-model.h" #include "em-utils.h" #include "em-vfolder-context.h" @@ -333,10 +334,12 @@ vfolder_adduri (EMailSession *session, /* ********************************************************************** */ static GList * -mv_find_folder (GList *l, CamelStore *store, const gchar *uri) +mv_find_folder (GList *l, EMailSession *session, const gchar *uri) { + CamelSession *camel_session = CAMEL_SESSION (session); + while (l) { - if (camel_store_folder_uri_equal (store, l->data, uri)) + if (e_mail_folder_uri_equal (camel_session, l->data, uri)) break; l = l->next; } @@ -345,11 +348,12 @@ mv_find_folder (GList *l, CamelStore *store, const gchar *uri) /* uri is a camel uri */ static gint -uri_is_ignore (CamelStore *store, const gchar *uri) +uri_is_ignore (EMailSession *session, const gchar *uri) { EAccountList *accounts; EAccount *account; EIterator *iter; + CamelSession *camel_session; const gchar *local_drafts_uri; const gchar *local_outbox_uri; const gchar *local_sent_uri; @@ -359,17 +363,16 @@ uri_is_ignore (CamelStore *store, const gchar *uri) local_outbox_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_OUTBOX); local_sent_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_SENT); - d(printf("checking '%s' against:\n %s\n %s\n %s\n", uri, - local_outbox_uri, - local_sent_uri, - local_drafts_uri)); + camel_session = CAMEL_SESSION (session); - found = camel_store_folder_uri_equal (store, local_outbox_uri, uri) - || camel_store_folder_uri_equal (store, local_sent_uri, uri) - || camel_store_folder_uri_equal (store, local_drafts_uri, uri); + if (e_mail_folder_uri_equal (camel_session, local_outbox_uri, uri)) + return TRUE; - if (found) - return found; + if (e_mail_folder_uri_equal (camel_session, local_sent_uri, uri)) + return TRUE; + + if (e_mail_folder_uri_equal (camel_session, local_drafts_uri, uri)) + return TRUE; accounts = e_get_account_list (); iter = e_list_get_iterator ((EList *) accounts); @@ -381,14 +384,16 @@ uri_is_ignore (CamelStore *store, const gchar *uri) d(printf("checking sent_folder_uri '%s' == '%s'\n", account->sent_folder_uri ? account->sent_folder_uri : "empty", uri)); - if (account->sent_folder_uri) { + if (account->sent_folder_uri != NULL) { curi = em_uri_to_camel (account->sent_folder_uri); - found = camel_store_folder_uri_equal (store, uri, curi); + found = e_mail_folder_uri_equal ( + camel_session, uri, curi); g_free (curi); } - if (!found && account->drafts_folder_uri) { + if (!found && account->drafts_folder_uri != NULL) { curi = em_uri_to_camel (account->drafts_folder_uri); - found = camel_store_folder_uri_equal (store, uri, curi); + found = e_mail_folder_uri_equal ( + camel_session, uri, curi); g_free (curi); } @@ -481,7 +486,7 @@ mail_vfolder_add_uri (EMailSession *session, g_return_if_fail (mail_in_main_thread ()); - is_ignore = uri_is_ignore (store, curi); + is_ignore = uri_is_ignore (session, curi); G_LOCK (vfolder); @@ -492,12 +497,12 @@ mail_vfolder_add_uri (EMailSession *session, is_ignore = TRUE; } else if (remove) { if (remote) { - if ((link = mv_find_folder (source_folders_remote, store, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_remote, session, curi)) != NULL) { g_free (link->data); source_folders_remote = g_list_remove_link (source_folders_remote, link); } } else { - if ((link = mv_find_folder (source_folders_local, store, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_local, session, curi)) != NULL) { g_free (link->data); source_folders_local = g_list_remove_link (source_folders_local, link); } @@ -505,10 +510,10 @@ mail_vfolder_add_uri (EMailSession *session, } else if (!is_ignore) { /* we ignore drafts/sent/outbox here */ if (remote) { - if (mv_find_folder (source_folders_remote, store, curi) == NULL) + if (mv_find_folder (source_folders_remote, session, curi) == NULL) source_folders_remote = g_list_prepend (source_folders_remote, g_strdup (curi)); } else { - if (mv_find_folder (source_folders_local, store, curi) == NULL) + if (mv_find_folder (source_folders_local, session, curi) == NULL) source_folders_local = g_list_prepend (source_folders_local, g_strdup (curi)); } } @@ -538,8 +543,8 @@ mail_vfolder_add_uri (EMailSession *session, (EMVFolderRule *)rule, source))) { gchar *csource; csource = em_uri_to_camel (source); - found = camel_store_folder_uri_equal (store, curi, csource); - d(printf(found?" '%s' == '%s'?\n":" '%s' != '%s'\n", curi, csource)); + found = e_mail_folder_uri_equal ( + CAMEL_SESSION (session), curi, csource); g_free (csource); } @@ -622,6 +627,7 @@ mail_vfolder_delete_uri (EMailBackend *backend, const gchar *curi) { EFilterRule *rule; + EMailSession *session; const gchar *source; CamelVeeFolder *vf; GString *changed; @@ -642,6 +648,8 @@ mail_vfolder_delete_uri (EMailBackend *backend, g_return_if_fail (mail_in_main_thread ()); + session = e_mail_backend_get_session (backend); + changed_count = 0; changed = g_string_new (""); @@ -665,7 +673,7 @@ mail_vfolder_delete_uri (EMailBackend *backend, /* Remove all sources that match, ignore changed events though because the adduri call above does the work async */ - if (camel_store_folder_uri_equal (store, curi, csource)) { + if (e_mail_folder_uri_equal (CAMEL_SESSION (session), curi, csource)) { vf = g_hash_table_lookup (vfolder_hash, rule->name); if (!vf) { g_warning ("vf is NULL for %s\n", rule->name); @@ -694,12 +702,12 @@ mail_vfolder_delete_uri (EMailBackend *backend, } done: - if ((link = mv_find_folder (source_folders_remote, store, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_remote, session, curi)) != NULL) { g_free (link->data); source_folders_remote = g_list_remove_link (source_folders_remote, link); } - if ((link = mv_find_folder (source_folders_local, store, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_local, session, curi)) != NULL) { g_free (link->data); source_folders_local = g_list_remove_link (source_folders_local, link); } @@ -743,6 +751,7 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; + CamelSession *session; gint changed = 0; gchar *from, *to; @@ -753,6 +762,8 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto g_return_if_fail (mail_in_main_thread ()); + session = camel_service_get_session (CAMEL_SERVICE (store)); + from = em_uri_from_camel (cfrom); to = em_uri_from_camel (cto); @@ -767,7 +778,7 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto /* Remove all sources that match, ignore changed events though because the adduri call above does the work async */ - if (camel_store_folder_uri_equal (store, cfrom, csource)) { + if (e_mail_folder_uri_equal (session, cfrom, csource)) { vf = g_hash_table_lookup (vfolder_hash, rule->name); if (!vf) { g_warning ("vf is NULL for %s\n", rule->name); -- cgit v1.2.3 From b73fe7218fedc76c1f5860c02315eac957669167 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 14:07:50 -0400 Subject: Build vfolder rules with CamelFolders instead of folder URIs. --- mail/mail-vfolder.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 0f98528d16..6958e82f62 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1448,15 +1448,16 @@ vfolder_gui_add_rule (EMVFolderRule *rule) void vfolder_gui_add_from_message (EMailSession *session, - CamelMimeMessage *msg, + CamelMimeMessage *message, gint flags, - const gchar *source) + CamelFolder *folder) { EMVFolderRule *rule; - g_return_if_fail (msg != NULL); + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); - rule = (EMVFolderRule*)em_vfolder_rule_from_message (context, msg, flags, source); + rule = (EMVFolderRule*) em_vfolder_rule_from_message ( + context, message, flags, folder); vfolder_gui_add_rule (rule); } @@ -1464,13 +1465,14 @@ void vfolder_gui_add_from_address (EMailSession *session, CamelInternetAddress *addr, gint flags, - const gchar *source) + CamelFolder *folder) { EMVFolderRule *rule; g_return_if_fail (addr != NULL); - rule = (EMVFolderRule*)em_vfolder_rule_from_address (context, addr, flags, source); + rule = (EMVFolderRule*)em_vfolder_rule_from_address ( + context, addr, flags, folder); vfolder_gui_add_rule (rule); } -- cgit v1.2.3 From 854cebbd119aac414e72823d4cb1a0bfb538163a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 5 May 2011 16:48:37 -0400 Subject: Simplify vfolder_adduri_desc(). --- mail/mail-vfolder.c | 67 ++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 37 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 6958e82f62..9295f8b718 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -203,46 +203,39 @@ struct _adduri_msg { static gchar * vfolder_adduri_desc (struct _adduri_msg *m) { - gchar *euri, *desc = NULL; - - /* Yuck yuck. Lookup the account name and use that to describe the path */ - /* We really need to normalise this across all of camel and evolution :-/ */ - euri = em_uri_from_camel (m->uri); - if (euri) { - CamelURL *url = camel_url_new (euri, NULL); - - if (url) { - const gchar *loc = NULL; - - if (url->host && !strcmp(url->host, "local") - && url->user && !strcmp(url->user, "local")) { - loc = _("On This Computer"); - } else { - gchar *uid; - const EAccount *account; - - if (url->user == NULL) - uid = g_strdup (url->host); - else - uid = g_strdup_printf("%s@%s", url->user, url->host); - - account = e_get_account_by_uid (uid); - g_free (uid); - if (account != NULL) - loc = account->name; - } + EAccount *account; + CamelStore *store; + CamelSession *session; + const gchar *store_name; + const gchar *uid; + gchar *folder_name; + gchar *description; + gboolean success; - if (loc && url->path) - desc = g_strdup_printf(_("Updating Search Folders for '%s:%s'"), loc, url->path); - camel_url_free (url); - } - g_free (euri); - } + session = CAMEL_SESSION (m->session); + + success = e_mail_folder_uri_parse ( + session, m->uri, &store, &folder_name, NULL); + + if (!success) + return NULL; + + uid = camel_service_get_uid (CAMEL_SERVICE (store)); + account = e_get_account_by_uid (uid); + + if (account != NULL) + store_name = account->name; + else + store_name = _("On This Computer"); + + description = g_strdup_printf ( + _("Updating Search Folders for '%s' : %s"), + store_name, folder_name); - if (desc == NULL) - desc = g_strdup_printf(_("Updating Search Folders for '%s'"), m->uri); + g_object_unref (store); + g_free (folder_name); - return desc; + return description; } static void -- cgit v1.2.3 From b17a7ffb773c91a8532977bca608d427f1af880b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 5 May 2011 17:25:08 -0400 Subject: mail-vfolder.c: Coding style cleanups. --- mail/mail-vfolder.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 9295f8b718..ede4f61546 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -339,7 +339,6 @@ mv_find_folder (GList *l, EMailSession *session, const gchar *uri) return l; } -/* uri is a camel uri */ static gint uri_is_ignore (EMailSession *session, const gchar *uri) { @@ -352,9 +351,12 @@ uri_is_ignore (EMailSession *session, const gchar *uri) const gchar *local_sent_uri; gint found = FALSE; - local_drafts_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_DRAFTS); - local_outbox_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_OUTBOX); - local_sent_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_SENT); + local_drafts_uri = + e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_DRAFTS); + local_outbox_uri = + e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_OUTBOX); + local_sent_uri = + e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_SENT); camel_session = CAMEL_SESSION (session); @@ -368,27 +370,21 @@ uri_is_ignore (EMailSession *session, const gchar *uri) return TRUE; accounts = e_get_account_list (); - iter = e_list_get_iterator ((EList *) accounts); - while (e_iterator_is_valid (iter)) { - gchar *curi; + iter = e_list_get_iterator (E_LIST (accounts)); + while (!found && e_iterator_is_valid (iter)) { + /* XXX EIterator misuses const. */ account = (EAccount *) e_iterator_get (iter); - d(printf("checking sent_folder_uri '%s' == '%s'\n", - account->sent_folder_uri ? account->sent_folder_uri : "empty", uri)); - - if (account->sent_folder_uri != NULL) { - curi = em_uri_to_camel (account->sent_folder_uri); + if (account->sent_folder_uri != NULL) found = e_mail_folder_uri_equal ( - camel_session, uri, curi); - g_free (curi); - } - if (!found && account->drafts_folder_uri != NULL) { - curi = em_uri_to_camel (account->drafts_folder_uri); + camel_session, uri, + account->sent_folder_uri); + + if (!found && account->drafts_folder_uri != NULL) found = e_mail_folder_uri_equal ( - camel_session, uri, curi); - g_free (curi); - } + camel_session, uri, + account->drafts_folder_uri); if (found) break; -- cgit v1.2.3 From 3b05e9099c5edc98631298fab9bdc98c77c1b4f3 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 5 May 2011 18:23:11 -0400 Subject: MailFolderCache: Emit folder names instead of URIs in signals. --- mail/mail-vfolder.c | 240 ++++++++++++++++++++-------------------------------- 1 file changed, 92 insertions(+), 148 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index ede4f61546..082c8427ca 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -376,7 +376,7 @@ uri_is_ignore (EMailSession *session, const gchar *uri) /* XXX EIterator misuses const. */ account = (EAccount *) e_iterator_get (iter); - if (account->sent_folder_uri != NULL) + if (!found && account->sent_folder_uri != NULL) found = e_mail_folder_uri_equal ( camel_session, uri, account->sent_folder_uri); @@ -386,9 +386,6 @@ uri_is_ignore (EMailSession *session, const gchar *uri) camel_session, uri, account->drafts_folder_uri); - if (found) - break; - e_iterator_next (iter); } @@ -399,61 +396,46 @@ uri_is_ignore (EMailSession *session, const gchar *uri) /* so special we never use it */ static gint -uri_is_spethal (CamelStore *store, const gchar *uri) +folder_is_spethal (CamelStore *store, + const gchar *folder_name) { - CamelURL *url; - gint res; - - /* This is a bit of a hack, but really the only way it can be done at the moment. */ - - if ((store->flags & (CAMEL_STORE_VTRASH|CAMEL_STORE_VJUNK)) == 0) - return FALSE; + /* This is a bit of a hack, but really the only way it can be done + * at the moment. */ - url = camel_url_new (uri, NULL); - if (url == NULL) - return TRUE; - - /* don't use strcasecmp here */ - if (url->fragment) { - res = (((store->flags & CAMEL_STORE_VTRASH) - && strcmp (url->fragment, CAMEL_VTRASH_NAME) == 0) - || ((store->flags & CAMEL_STORE_VJUNK) - && strcmp (url->fragment, CAMEL_VJUNK_NAME) == 0)); - } else { - res = url->path - && (((store->flags & CAMEL_STORE_VTRASH) - && strcmp(url->path, "/" CAMEL_VTRASH_NAME) == 0) - || ((store->flags & CAMEL_STORE_VJUNK) - && strcmp(url->path, "/" CAMEL_VJUNK_NAME) == 0)); - } + if (store->flags & CAMEL_STORE_VTRASH) + if (g_strcmp0 (folder_name, CAMEL_VTRASH_NAME) == 0) + return TRUE; - camel_url_free (url); + if (store->flags & CAMEL_STORE_VJUNK) + if (g_strcmp0 (folder_name, CAMEL_VJUNK_NAME) == 0) + return TRUE; - return res; + return FALSE; } /** - * mail_vfolder_add_uri: + * mail_vfolder_add_folder: * @session: an #EMailSession - * @store: a #CamelStore containing the uri - * @curi: an email uri to be added/removed - * @remove: Whether the uri should be removed or added + * @store: a #CamelStore + * @folder: a folder name + * @remove: whether the folder should be removed or added * - * Called when a new uri becomes (un)available. If @store is not a - * CamelVeeStore, the uri is added/removed from the list of cached source - * folders. Then each vfolder rule is checked to see if the specified uri + * Called when a new folder becomes (un)available. If @store is not a + * CamelVeeStore, the folder is added/removed from the list of cached source + * folders. Then each vfolder rule is checked to see if the specified folder * matches a source of the rule. It builds a list of vfolders that use (or - * would use) the specified uri as a source. It then adds (or removes) this uri - * to (from) those vfolders via camel_vee_folder_add/remove_folder() but does - * not modify the actual filters or write changes to disk. + * would use) the specified folder as a source. It then adds (or removes) + * this folder to (from) those vfolders via camel_vee_folder_add/ + * remove_folder() but does not modify the actual filters or write changes + * to disk. * * NOTE: This function must be called from the main thread. */ static void -mail_vfolder_add_uri (EMailSession *session, - CamelStore *store, - const gchar *curi, - gint remove) +mail_vfolder_add_folder (EMailSession *session, + CamelStore *store, + const gchar *folder_name, + gint remove) { EFilterRule *rule; const gchar *source; @@ -467,31 +449,28 @@ mail_vfolder_add_uri (EMailSession *session, provider = camel_service_get_provider (CAMEL_SERVICE (store)); remote = (provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0; - uri = em_uri_from_camel (curi); - if (uri_is_spethal (store, curi)) { - g_free (uri); + if (folder_is_spethal (store, folder_name)) return; - } g_return_if_fail (mail_in_main_thread ()); - is_ignore = uri_is_ignore (session, curi); + uri = e_mail_folder_uri_build (store, folder_name); - G_LOCK (vfolder); + is_ignore = uri_is_ignore (session, uri); -/* d(printf("%s uri to check: %s\n", remove?"Removing":"Adding", uri)); */ + G_LOCK (vfolder); /* maintain the source folders lists for changed rules later on */ if (CAMEL_IS_VEE_STORE (store)) { is_ignore = TRUE; } else if (remove) { if (remote) { - if ((link = mv_find_folder (source_folders_remote, session, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_remote, session, uri)) != NULL) { g_free (link->data); source_folders_remote = g_list_remove_link (source_folders_remote, link); } } else { - if ((link = mv_find_folder (source_folders_local, session, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_local, session, uri)) != NULL) { g_free (link->data); source_folders_local = g_list_remove_link (source_folders_local, link); } @@ -499,11 +478,11 @@ mail_vfolder_add_uri (EMailSession *session, } else if (!is_ignore) { /* we ignore drafts/sent/outbox here */ if (remote) { - if (mv_find_folder (source_folders_remote, session, curi) == NULL) - source_folders_remote = g_list_prepend (source_folders_remote, g_strdup (curi)); + if (mv_find_folder (source_folders_remote, session, uri) == NULL) + source_folders_remote = g_list_prepend (source_folders_remote, g_strdup (uri)); } else { - if (mv_find_folder (source_folders_local, session, curi) == NULL) - source_folders_local = g_list_prepend (source_folders_local, g_strdup (curi)); + if (mv_find_folder (source_folders_local, session, uri) == NULL) + source_folders_local = g_list_prepend (source_folders_local, g_strdup (uri)); } } @@ -530,11 +509,8 @@ mail_vfolder_add_uri (EMailSession *session, source = NULL; while (!found && (source = em_vfolder_rule_next_source ( (EMVFolderRule *)rule, source))) { - gchar *csource; - csource = em_uri_to_camel (source); found = e_mail_folder_uri_equal ( - CAMEL_SESSION (session), curi, csource); - g_free (csource); + CAMEL_SESSION (session), uri, source); } if (found) { @@ -552,68 +528,33 @@ done: G_UNLOCK (vfolder); if (folders != NULL) - vfolder_adduri (session, curi, folders, remove); + vfolder_adduri (session, uri, folders, remove); g_free (uri); } /** - * mail_vfolder_uri_available: - * @session: an #EMailSession - * @store: a #CamelStore containing the uri - * @uri: uri of a folder that became available - * - * Adds @uri to the list of folders searched if any vfolder source matches the - * uri. This function has a transient effect and does not permanently modify - * the vfolder filter rules on disk. - */ -static void -mail_vfolder_notify_uri_available (EMailSession *session, - CamelStore *store, - const gchar *uri) -{ - mail_vfolder_add_uri (session, store, uri, FALSE); -} - -/** - * mail_vfolder_uri_available: - * @session: an #EMailSession - * @store: a #CamelStore containing the uri - * @uri: uri of a folder that became unavailable - * - * Removes @uri from the list of folders searched if any vfolder source matches the - * uri. This function has a transient effect and does not permanently modify - * the vfolder filter rules on disk. - */ -static void -mail_vfolder_notify_uri_unavailable (EMailSession *session, - CamelStore *store, - const gchar *uri) -{ - mail_vfolder_add_uri (session, store, uri, TRUE); -} - -/** - * mail_vfolder_delete_uri: + * mail_vfolder_delete_folder: * @backend: an #EMailBackend - * @store: a #CamelStore containing the uri - * @curi: an email uri that has been deleted + * @store: a #CamelStore + * @folder_name: a folder name * - * Looks through all vfolder rules to see if @curi is listed as a source for any - * vfolder rules. If the uri is found in the source for any rule, it is removed - * and the user is alerted to the fact that the vfolder rules have been updated. - * The new vfolder rules are written to disk. + * Looks through all vfolder rules to see if @folder_name is listed as a + * source for any vfolder rules. If the folder is found in the source for + * any rule, it is removed and the user is alerted to the fact that the + * vfolder rules have been updated. The new vfolder rules are written + * to disk. * - * XXX: It doesn't appear that the changes to the vfolder rules are sent down to - * the camel level, however. So the actual vfolders will not change behavior - * until evolution is restarted (?) + * XXX: It doesn't appear that the changes to the vfolder rules are sent + * down to the camel level, however. So the actual vfolders will not change + * behavior until evolution is restarted (?) * * NOTE: This function must be called from the main thread. */ static void -mail_vfolder_delete_uri (EMailBackend *backend, - CamelStore *store, - const gchar *curi) +mail_vfolder_delete_folder (EMailBackend *backend, + CamelStore *store, + const gchar *folder_name) { EFilterRule *rule; EMailSession *session; @@ -626,18 +567,17 @@ mail_vfolder_delete_uri (EMailBackend *backend, g_return_if_fail (E_IS_MAIL_BACKEND (backend)); g_return_if_fail (CAMEL_IS_STORE (store)); - g_return_if_fail (curi != NULL); + g_return_if_fail (folder_name != NULL); - if (uri_is_spethal (store, curi)) + if (folder_is_spethal (store, folder_name)) return; - uri = em_uri_from_camel (curi); - d(printf ("Deleting uri to check: %s\n", uri)); g_return_if_fail (mail_in_main_thread ()); session = e_mail_backend_get_session (backend); + uri = e_mail_folder_uri_build (store, folder_name); changed_count = 0; changed = g_string_new (""); @@ -658,11 +598,9 @@ mail_vfolder_delete_uri (EMailBackend *backend, source = NULL; while ((source = em_vfolder_rule_next_source ((EMVFolderRule *) rule, source))) { - gchar *csource = em_uri_to_camel (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), curi, csource)) { + if (e_mail_folder_uri_equal (CAMEL_SESSION (session), uri, source)) { vf = g_hash_table_lookup (vfolder_hash, rule->name); if (!vf) { g_warning ("vf is NULL for %s\n", rule->name); @@ -686,17 +624,16 @@ mail_vfolder_delete_uri (EMailBackend *backend, changed_count++; source = NULL; } - g_free (csource); } } done: - if ((link = mv_find_folder (source_folders_remote, session, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_remote, session, uri)) != NULL) { g_free (link->data); source_folders_remote = g_list_remove_link (source_folders_remote, link); } - if ((link = mv_find_folder (source_folders_local, session, curi)) != NULL) { + if ((link = mv_find_folder (source_folders_local, session, uri)) != NULL) { g_free (link->data); source_folders_local = g_list_remove_link (source_folders_local, link); } @@ -735,26 +672,35 @@ done: /* called when a uri is renamed in a store */ static void -mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto) +mail_vfolder_rename_folder (CamelStore *store, + const gchar *old_folder_name, + const gchar *new_folder_name) { EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; CamelSession *session; gint changed = 0; - gchar *from, *to; + gchar *old_uri; + gchar *new_uri; d(printf("vfolder rename uri: %s to %s\n", cfrom, cto)); - if (context == NULL || uri_is_spethal (store, cfrom) || uri_is_spethal (store, cto)) + if (context == NULL) + return; + + if (folder_is_spethal (store, old_folder_name)) + return; + + if (folder_is_spethal (store, new_folder_name)) return; g_return_if_fail (mail_in_main_thread ()); session = camel_service_get_session (CAMEL_SERVICE (store)); - from = em_uri_from_camel (cfrom); - to = em_uri_from_camel (cto); + old_uri = e_mail_folder_uri_build (store, old_folder_name); + new_uri = e_mail_folder_uri_build (store, new_folder_name); G_LOCK (vfolder); @@ -763,11 +709,9 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto while ((rule = e_rule_context_next_rule ((ERuleContext *)context, rule, NULL))) { source = NULL; while ((source = em_vfolder_rule_next_source ((EMVFolderRule *)rule, source))) { - gchar *csource = em_uri_to_camel (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 (session, cfrom, csource)) { + if (e_mail_folder_uri_equal (session, old_uri, source)) { vf = g_hash_table_lookup (vfolder_hash, rule->name); if (!vf) { g_warning ("vf is NULL for %s\n", rule->name); @@ -778,12 +722,11 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto G_SIGNAL_MATCH_DATA, 0, 0, NULL, rule_changed, vf); em_vfolder_rule_remove_source ((EMVFolderRule *)rule, source); - em_vfolder_rule_add_source ((EMVFolderRule *)rule, to); + em_vfolder_rule_add_source ((EMVFolderRule *)rule, new_uri); g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), vf); changed++; source = NULL; } - g_free (csource); } } @@ -800,8 +743,8 @@ mail_vfolder_rename_uri (CamelStore *store, const gchar *cfrom, const gchar *cto g_free (user); } - g_free (from); - g_free (to); + g_free (old_uri); + g_free (new_uri); } GList * @@ -834,16 +777,17 @@ rule_add_sources (EMailSession *session, folder_cache = e_mail_session_get_folder_cache (session); while (l) { - gchar *curi = em_uri_to_camel (l->data); + const gchar *uri = l->data; if (mail_folder_cache_get_folder_from_uri ( - folder_cache, curi, &newfolder)) { + folder_cache, uri, &newfolder)) { if (newfolder) - sources_folder = g_list_append (sources_folder, newfolder); + sources_folder = g_list_append ( + sources_folder, newfolder); else - sources_uri = g_list_append (sources_uri, g_strdup (curi)); + sources_uri = g_list_append ( + sources_uri, g_strdup (uri)); } - g_free (curi); l = l->next; } @@ -1059,38 +1003,38 @@ store_folder_renamed_cb (CamelStore *store, static void folder_available_cb (MailFolderCache *cache, CamelStore *store, - const gchar *uri, + const gchar *folder_name, EMailSession *session) { - mail_vfolder_notify_uri_available (session, store, uri); + mail_vfolder_add_folder (session, store, folder_name, FALSE); } static void folder_unavailable_cb (MailFolderCache *cache, CamelStore *store, - const gchar *uri, + const gchar *folder_name, EMailSession *session) { - mail_vfolder_notify_uri_unavailable (session, store, uri); + mail_vfolder_add_folder (session, store, folder_name, TRUE); } static void folder_deleted_cb (MailFolderCache *cache, CamelStore *store, - const gchar *uri, + const gchar *folder_name, EMailBackend *backend) { - mail_vfolder_delete_uri (backend, store, uri); + mail_vfolder_delete_folder (backend, store, folder_name); } static void folder_renamed_cb (MailFolderCache *cache, CamelStore *store, - const gchar *olduri, - const gchar *newuri, + const gchar *old_folder_name, + const gchar *new_folder_name, gpointer user_data) { - mail_vfolder_rename_uri (store, olduri, newuri); + mail_vfolder_rename_folder (store, old_folder_name, new_folder_name); } void -- cgit v1.2.3 From 708ce51377b358304b19efd271c6b5005fea1866 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 7 May 2011 10:29:37 -0400 Subject: Adapt to CamelFolderInfo.name -> display_name. --- mail/mail-vfolder.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 082c8427ca..b867bf485b 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -945,7 +945,9 @@ store_folder_deleted_cb (CamelStore *store, e_rule_context_save ((ERuleContext *)context, user); g_free (user); } else { - g_warning("Cannot find rule for deleted vfolder '%s'", info->name); + g_warning ( + "Cannot find rule for deleted vfolder '%s'", + info->display_name); } G_UNLOCK (vfolder); -- cgit v1.2.3 From 578214584caa7805edca09b27e2306dc31d80fb6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 7 May 2011 12:22:36 -0400 Subject: Whitespace and coding style cleanups. --- mail/mail-vfolder.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index b867bf485b..67e3d0752a 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -501,9 +501,12 @@ mail_vfolder_add_folder (EMailSession *session, * they must be explictly listed as a source. */ if (rule->source && !is_ignore - && ((((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL && !remote) - || (((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE && remote) - || (((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE))) + && ((((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_LOCAL && !remote) + || (((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE && remote) + || (((EMVFolderRule *)rule)->with == + EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE))) found = TRUE; source = NULL; @@ -938,7 +941,9 @@ store_folder_deleted_cb (CamelStore *store, 0, 0, NULL, context_rule_removed, context); e_rule_context_remove_rule ((ERuleContext *)context, rule); g_object_unref (rule); - g_signal_connect(context, "rule_removed", G_CALLBACK(context_rule_removed), context); + g_signal_connect ( + context, "rule_removed", + G_CALLBACK (context_rule_removed), context); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); -- cgit v1.2.3 From 54da4fc09cf226fdb59b9f0c70555e2e57dc1f91 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 8 May 2011 13:24:42 -0400 Subject: Coding style cleanups. --- mail/mail-vfolder.c | 90 ++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 67e3d0752a..a2ebddf604 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -96,7 +96,7 @@ vfolder_setup_exec (struct _setup_msg *m, GList *l, *list = NULL; CamelFolder *folder; - camel_vee_folder_set_expression ((CamelVeeFolder *)m->folder, m->query); + camel_vee_folder_set_expression ((CamelVeeFolder *) m->folder, m->query); l = m->sources_uri; while (l && !vfolder_shutdown) { @@ -118,7 +118,7 @@ vfolder_setup_exec (struct _setup_msg *m, } if (!vfolder_shutdown) - camel_vee_folder_set_folders ((CamelVeeFolder *)m->folder, list); + camel_vee_folder_set_folders ((CamelVeeFolder *) m->folder, list); l = list; while (l) { @@ -273,7 +273,7 @@ vfolder_adduri_exec (struct _adduri_msg *m, camel_vee_folder_remove_folder ( CAMEL_VEE_FOLDER (l->data), folder); else - camel_vee_folder_add_folder ((CamelVeeFolder *)l->data, folder); + camel_vee_folder_add_folder ((CamelVeeFolder *) l->data, folder); l = l->next; } g_object_unref (folder); @@ -289,7 +289,7 @@ static void vfolder_adduri_free (struct _adduri_msg *m) { g_object_unref (m->session); - g_list_foreach (m->folders, (GFunc)g_object_unref, NULL); + g_list_foreach (m->folders, (GFunc) g_object_unref, NULL); g_list_free (m->folders); g_free (m->uri); } @@ -490,7 +490,7 @@ mail_vfolder_add_folder (EMailSession *session, goto done; rule = NULL; - while ((rule = e_rule_context_next_rule ((ERuleContext *)context, rule, NULL))) { + while ((rule = e_rule_context_next_rule ((ERuleContext *) context, rule, NULL))) { gint found = FALSE; if (!rule->name) { @@ -501,17 +501,17 @@ mail_vfolder_add_folder (EMailSession *session, * they must be explictly listed as a source. */ if (rule->source && !is_ignore - && ((((EMVFolderRule *)rule)->with == + && ((((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL && !remote) - || (((EMVFolderRule *)rule)->with == + || (((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE && remote) - || (((EMVFolderRule *)rule)->with == + || (((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE))) found = TRUE; source = NULL; while (!found && (source = em_vfolder_rule_next_source ( - (EMVFolderRule *)rule, source))) { + (EMVFolderRule *) rule, source))) { found = e_mail_folder_uri_equal ( CAMEL_SESSION (session), uri, source); } @@ -613,7 +613,7 @@ mail_vfolder_delete_folder (EMailBackend *backend, rule, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, rule_changed, vf); - em_vfolder_rule_remove_source ((EMVFolderRule *)rule, source); + em_vfolder_rule_remove_source ((EMVFolderRule *) rule, source); g_signal_connect (rule, "changed", G_CALLBACK(rule_changed), vf); if (changed_count == 0) { g_string_append (changed, rule->name); @@ -709,9 +709,9 @@ mail_vfolder_rename_folder (CamelStore *store, /* see if any rules directly reference this removed uri */ rule = NULL; - while ((rule = e_rule_context_next_rule ((ERuleContext *)context, rule, NULL))) { + while ((rule = e_rule_context_next_rule ((ERuleContext *) context, rule, NULL))) { source = NULL; - while ((source = em_vfolder_rule_next_source ((EMVFolderRule *)rule, source))) { + while ((source = em_vfolder_rule_next_source ((EMVFolderRule *) 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 (session, old_uri, source)) { @@ -724,8 +724,8 @@ mail_vfolder_rename_folder (CamelStore *store, rule, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, rule_changed, vf); - em_vfolder_rule_remove_source ((EMVFolderRule *)rule, source); - em_vfolder_rule_add_source ((EMVFolderRule *)rule, new_uri); + em_vfolder_rule_remove_source ((EMVFolderRule *) rule, source); + em_vfolder_rule_add_source ((EMVFolderRule *) rule, new_uri); g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), vf); changed++; source = NULL; @@ -742,7 +742,7 @@ mail_vfolder_rename_folder (CamelStore *store, d(printf("Vfolders updated from renamed folder\n")); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_save ((ERuleContext *)context, user); + e_rule_context_save ((ERuleContext *) context, user); g_free (user); } @@ -839,20 +839,20 @@ rule_changed (EFilterRule *rule, CamelFolder *folder) /* find any (currently available) folders, and add them to the ones to open */ rule_add_sources ( - session, ((EMVFolderRule *)rule)->sources, + session, ((EMVFolderRule *) rule)->sources, &sources_folder, &sources_uri); G_LOCK (vfolder); - if (((EMVFolderRule *)rule)->with == + if (((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL || - ((EMVFolderRule *)rule)->with == + ((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) rule_add_sources ( session, source_folders_local, &sources_folder, &sources_uri); - if (((EMVFolderRule *)rule)->with == + if (((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE || - ((EMVFolderRule *)rule)->with == + ((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) rule_add_sources ( session, source_folders_remote, @@ -930,7 +930,7 @@ store_folder_deleted_cb (CamelStore *store, G_LOCK (vfolder); /* delete it from our list */ - rule = e_rule_context_find_rule ((ERuleContext *)context, info->full_name, NULL); + rule = e_rule_context_find_rule ((ERuleContext *) context, info->full_name, NULL); if (rule) { const gchar *config_dir; @@ -939,7 +939,7 @@ store_folder_deleted_cb (CamelStore *store, g_signal_handlers_disconnect_matched ( context, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, context_rule_removed, context); - e_rule_context_remove_rule ((ERuleContext *)context, rule); + e_rule_context_remove_rule ((ERuleContext *) context, rule); g_object_unref (rule); g_signal_connect ( context, "rule_removed", @@ -947,7 +947,7 @@ store_folder_deleted_cb (CamelStore *store, config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_save ((ERuleContext *)context, user); + e_rule_context_save ((ERuleContext *) context, user); g_free (user); } else { g_warning ( @@ -982,7 +982,7 @@ store_folder_renamed_cb (CamelStore *store, g_free (key); g_hash_table_insert (vfolder_hash, g_strdup (info->full_name), folder); - rule = e_rule_context_find_rule ((ERuleContext *)context, old_name, NULL); + rule = e_rule_context_find_rule ((ERuleContext *) context, old_name, NULL); if (!rule) { G_UNLOCK (vfolder); g_warning ("Rule shouldn't be NULL\n"); @@ -997,7 +997,7 @@ store_folder_renamed_cb (CamelStore *store, config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_save ((ERuleContext *)context, user); + e_rule_context_save ((ERuleContext *) context, user); g_free (user); G_UNLOCK (vfolder); @@ -1108,7 +1108,7 @@ vfolder_load_storage (EMailBackend *backend) context = em_vfolder_context_new (session); xmlfile = g_build_filename (EVOLUTION_PRIVDATADIR, "vfoldertypes.xml", NULL); - if (e_rule_context_load ((ERuleContext *)context, + if (e_rule_context_load ((ERuleContext *) context, xmlfile, user) != 0) { g_warning("cannot load vfolders: %s\n", ((ERuleContext *)context)->error); } @@ -1123,10 +1123,10 @@ vfolder_load_storage (EMailBackend *backend) /* and setup the rules we have */ rule = NULL; - while ((rule = e_rule_context_next_rule ((ERuleContext *)context, rule, NULL))) { + while ((rule = e_rule_context_next_rule ((ERuleContext *) context, rule, NULL))) { if (rule->name) { d(printf("rule added: %s\n", rule->name)); - context_rule_added ((ERuleContext *)context, rule); + context_rule_added ((ERuleContext *) context, rule); } else { d(printf("invalid rule (%p) encountered: rule->name is NULL\n", rule)); } @@ -1166,7 +1166,7 @@ vfolder_revert (void) d(printf("vfolder_revert\n")); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_revert ((ERuleContext *)context, user); + e_rule_context_revert ((ERuleContext *) context, user); g_free (user); } @@ -1222,7 +1222,7 @@ edit_rule_response (GtkWidget *w, gint button, gpointer data) e_filter_rule_copy (orig, rule); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_save ((ERuleContext *)context, user); + e_rule_context_save ((ERuleContext *) context, user); g_free (user); } @@ -1249,9 +1249,9 @@ vfolder_edit_rule (EMailBackend *backend, g_object_ref (G_OBJECT (rule)); newrule = e_filter_rule_clone (rule); - w = e_filter_rule_get_widget ((EFilterRule *)newrule, (ERuleContext *)context); + w = e_filter_rule_get_widget ((EFilterRule *) newrule, (ERuleContext *) context); - gd = (GtkDialog *)gtk_dialog_new_with_buttons ( + gd = (GtkDialog *) gtk_dialog_new_with_buttons ( _("Edit Search Folder"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, @@ -1266,7 +1266,7 @@ vfolder_edit_rule (EMailBackend *backend, g_object_set (gd, "resizable", TRUE, NULL); gtk_window_set_default_size (GTK_WINDOW (gd), 500, 500); gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); - gtk_widget_show ((GtkWidget *)gd); + gtk_widget_show ((GtkWidget *) gd); g_object_set_data_full ( G_OBJECT (gd), "rule", newrule, (GDestroyNotify) g_object_unref); @@ -1276,7 +1276,7 @@ vfolder_edit_rule (EMailBackend *backend, g_signal_connect ( gd, "response", G_CALLBACK (edit_rule_response), NULL); - gtk_widget_show ((GtkWidget *)gd); + gtk_widget_show ((GtkWidget *) gd); } else { /* TODO: we should probably just create it ... */ e_mail_backend_submit_alert ( @@ -1302,7 +1302,7 @@ new_rule_clicked (GtkWidget *w, gint button, gpointer data) return; } - if (e_rule_context_find_rule ((ERuleContext *)context, rule->name, rule->source)) { + if (e_rule_context_find_rule ((ERuleContext *) context, rule->name, rule->source)) { e_alert_run_dialog_for_args ( GTK_WINDOW (w), "mail:vfolder-notunique", rule->name, NULL); @@ -1310,10 +1310,10 @@ new_rule_clicked (GtkWidget *w, gint button, gpointer data) } g_object_ref (rule); - e_rule_context_add_rule ((ERuleContext *)context, rule); + e_rule_context_add_rule ((ERuleContext *) context, rule); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_save ((ERuleContext *)context, user); + e_rule_context_save ((ERuleContext *) context, user); g_free (user); } @@ -1332,7 +1332,7 @@ new_rule_changed_cb (EFilterRule *rule, GtkDialog *dialog) EFilterPart * vfolder_create_part (const gchar *name) { - return e_rule_context_create_part ((ERuleContext *)context, name); + return e_rule_context_create_part ((ERuleContext *) context, name); } /* clones a filter/search rule into a matching vfolder rule @@ -1346,7 +1346,7 @@ vfolder_clone_rule (EMailSession *session, EFilterRule *in) rule = em_vfolder_rule_new (session); xml = e_filter_rule_xml_encode (in); - e_filter_rule_xml_decode (rule, xml, (ERuleContext *)context); + e_filter_rule_xml_decode (rule, xml, (ERuleContext *) context); xmlFreeNodeList (xml); return rule; @@ -1360,9 +1360,9 @@ vfolder_gui_add_rule (EMVFolderRule *rule) GtkDialog *gd; GtkWidget *container; - w = e_filter_rule_get_widget ((EFilterRule *)rule, (ERuleContext *)context); + w = e_filter_rule_get_widget ((EFilterRule *) rule, (ERuleContext *) context); - gd = (GtkDialog *)gtk_dialog_new_with_buttons ( + gd = (GtkDialog *) gtk_dialog_new_with_buttons ( _("New Search Folder"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, @@ -1378,12 +1378,12 @@ vfolder_gui_add_rule (EMVFolderRule *rule) g_object_set (gd, "resizable", TRUE, NULL); gtk_window_set_default_size (GTK_WINDOW (gd), 500, 500); gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); - gtk_widget_show ((GtkWidget *)gd); + gtk_widget_show ((GtkWidget *) gd); g_object_set_data_full(G_OBJECT(gd), "rule", rule, (GDestroyNotify)g_object_unref); g_signal_connect(rule, "changed", G_CALLBACK (new_rule_changed_cb), gd); - new_rule_changed_cb ((EFilterRule*)rule, gd); + new_rule_changed_cb ((EFilterRule*) rule, gd); g_signal_connect(gd, "response", G_CALLBACK(new_rule_clicked), NULL); - gtk_widget_show ((GtkWidget *)gd); + gtk_widget_show ((GtkWidget *) gd); } void @@ -1411,7 +1411,7 @@ vfolder_gui_add_from_address (EMailSession *session, g_return_if_fail (addr != NULL); - rule = (EMVFolderRule*)em_vfolder_rule_from_address ( + rule = (EMVFolderRule*) em_vfolder_rule_from_address ( context, addr, flags, folder); vfolder_gui_add_rule (rule); } -- cgit v1.2.3 From e58844a3624d3672efda4b4007ba7b1867b00cf4 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 12 May 2011 00:39:08 -0400 Subject: Get vfolder_edit_rule() working again. It was handling folder URIs the old way. Also, use gtk_dialog_run() to simplify the logic. --- mail/mail-vfolder.c | 125 +++++++++++++++++++++++++--------------------------- 1 file changed, 61 insertions(+), 64 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index a2ebddf604..de39ca53cd 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1210,81 +1210,78 @@ vfolder_edit (EShellView *shell_view) gtk_widget_destroy (dialog); } -static void -edit_rule_response (GtkWidget *w, gint button, gpointer data) +void +vfolder_edit_rule (EMailBackend *backend, + const gchar *folder_uri) { - if (button == GTK_RESPONSE_OK) { + 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 (folder_uri != NULL); + + session = e_mail_backend_get_session (backend); + + e_mail_folder_uri_parse ( + CAMEL_SESSION (session), folder_uri, + NULL, &folder_name, NULL); + + if (folder_name != NULL) { + rule = e_rule_context_find_rule ( + (ERuleContext *) context, folder_name, NULL); + g_free (folder_name); + } + + if (rule == NULL) { + /* TODO: we should probably just create it ... */ + e_mail_backend_submit_alert ( + backend, "mail:vfolder-notexist", folder_uri, NULL); + return; + } + + g_object_ref (rule); + newrule = e_filter_rule_clone (rule); + + dialog = gtk_dialog_new_with_buttons ( + _("Edit Search Folder"), NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + + gtk_container_set_border_width (GTK_CONTAINER (dialog), 6); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + + gtk_window_set_default_size (GTK_WINDOW (dialog), 500, 500); + gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); + + container = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); + gtk_box_set_spacing (GTK_BOX (container), 6); + + widget = e_filter_rule_get_widget ( + (EFilterRule *) newrule, (ERuleContext *) context); + gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); + gtk_widget_show (widget); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { const gchar *config_dir; gchar *user; - EFilterRule *rule = g_object_get_data (G_OBJECT (w), "rule"); - EFilterRule *orig = g_object_get_data (G_OBJECT (w), "orig"); - e_filter_rule_copy (orig, rule); + e_filter_rule_copy (rule, newrule); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); e_rule_context_save ((ERuleContext *) context, user); g_free (user); } - gtk_widget_destroy (w); -} - -void -vfolder_edit_rule (EMailBackend *backend, - const gchar *uri) -{ - GtkWidget *w; - GtkDialog *gd; - GtkWidget *container; - EFilterRule *rule, *newrule; - CamelURL *url; - - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); - g_return_if_fail (uri != NULL); - - url = camel_url_new (uri, NULL); - if (url && url->fragment - && (rule = e_rule_context_find_rule ( - (ERuleContext *) context, url->fragment, NULL))) { - g_object_ref (G_OBJECT (rule)); - newrule = e_filter_rule_clone (rule); - - w = e_filter_rule_get_widget ((EFilterRule *) newrule, (ERuleContext *) context); - - gd = (GtkDialog *) gtk_dialog_new_with_buttons ( - _("Edit Search Folder"), NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - - gtk_container_set_border_width (GTK_CONTAINER (gd), 6); - - container = gtk_dialog_get_content_area (gd); - gtk_box_set_spacing (GTK_BOX (container), 6); - - gtk_dialog_set_default_response (gd, GTK_RESPONSE_OK); - g_object_set (gd, "resizable", TRUE, NULL); - gtk_window_set_default_size (GTK_WINDOW (gd), 500, 500); - gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); - gtk_widget_show ((GtkWidget *) gd); - g_object_set_data_full ( - G_OBJECT (gd), "rule", newrule, - (GDestroyNotify) g_object_unref); - g_object_set_data_full ( - G_OBJECT (gd), "orig", rule, - (GDestroyNotify) g_object_unref); - g_signal_connect ( - gd, "response", - G_CALLBACK (edit_rule_response), NULL); - gtk_widget_show ((GtkWidget *) gd); - } else { - /* TODO: we should probably just create it ... */ - e_mail_backend_submit_alert ( - backend, "mail:vfolder-notexist", uri, NULL); - } + gtk_widget_destroy (dialog); - if (url) - camel_url_free (url); + g_object_unref (rule); + g_object_unref (newrule); } static void -- cgit v1.2.3 From 5146ff4c535f443fe25290eb96631e91ad44c8ef Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 21 May 2011 10:02:58 -0400 Subject: Coding style and whitespace cleanup. --- mail/mail-vfolder.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index de39ca53cd..e726433897 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -467,22 +467,26 @@ mail_vfolder_add_folder (EMailSession *session, if (remote) { if ((link = mv_find_folder (source_folders_remote, session, uri)) != NULL) { g_free (link->data); - source_folders_remote = g_list_remove_link (source_folders_remote, link); + source_folders_remote = g_list_remove_link ( + source_folders_remote, link); } } else { if ((link = mv_find_folder (source_folders_local, session, uri)) != NULL) { g_free (link->data); - source_folders_local = g_list_remove_link (source_folders_local, link); + source_folders_local = g_list_remove_link ( + source_folders_local, link); } } } else if (!is_ignore) { /* we ignore drafts/sent/outbox here */ if (remote) { if (mv_find_folder (source_folders_remote, session, uri) == NULL) - source_folders_remote = g_list_prepend (source_folders_remote, g_strdup (uri)); + source_folders_remote = g_list_prepend ( + source_folders_remote, g_strdup (uri)); } else { if (mv_find_folder (source_folders_local, session, uri) == NULL) - source_folders_local = g_list_prepend (source_folders_local, g_strdup (uri)); + source_folders_local = g_list_prepend ( + source_folders_local, g_strdup (uri)); } } @@ -1115,8 +1119,12 @@ vfolder_load_storage (EMailBackend *backend) g_free (xmlfile); g_free (user); - g_signal_connect(context, "rule_added", G_CALLBACK(context_rule_added), context); - g_signal_connect(context, "rule_removed", G_CALLBACK(context_rule_removed), context); + g_signal_connect ( + context, "rule_added", + G_CALLBACK (context_rule_added), context); + g_signal_connect ( + context, "rule_removed", + G_CALLBACK (context_rule_removed), context); /* load store to mail component */ e_mail_store_add (session, vfolder_store, _("Search Folders")); @@ -1299,7 +1307,8 @@ new_rule_clicked (GtkWidget *w, gint button, gpointer data) return; } - if (e_rule_context_find_rule ((ERuleContext *) context, rule->name, rule->source)) { + if (e_rule_context_find_rule ( + (ERuleContext *) context, rule->name, rule->source)) { e_alert_run_dialog_for_args ( GTK_WINDOW (w), "mail:vfolder-notunique", rule->name, NULL); @@ -1323,7 +1332,8 @@ new_rule_changed_cb (EFilterRule *rule, GtkDialog *dialog) g_return_if_fail (rule != NULL); g_return_if_fail (dialog != NULL); - gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, rule->parts != NULL); + gtk_dialog_set_response_sensitive ( + dialog, GTK_RESPONSE_OK, rule->parts != NULL); } EFilterPart * -- cgit v1.2.3 From 7050475f84247fb15e24aa1bb31502106c18815d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 23 May 2011 17:09:24 -0400 Subject: EMFolderTree: Store an EMailBackend instead of an EMailSession. All this so EMFolderTree can submit EActivity instances for async ops. You can obtain an EMailSession from an EMailBackend, but not vice versa. Creates lots of pretty ripples in the mail code, but ultimately reduces complexity. So it's a code cleanup of sorts. --- mail/mail-vfolder.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index e726433897..526e0ea1ad 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -805,13 +805,15 @@ rule_add_sources (EMailSession *session, static void rule_changed (EFilterRule *rule, CamelFolder *folder) { + EMailBackend *backend; EMailSession *session; GList *sources_uri = NULL, *sources_folder = NULL; GString *query; const gchar *full_name; full_name = camel_folder_get_full_name (folder); - session = em_vfolder_rule_get_session (EM_VFOLDER_RULE (rule)); + backend = em_vfolder_rule_get_backend (EM_VFOLDER_RULE (rule)); + session = e_mail_backend_get_session (backend); /* if the folder has changed name, then add it, then remove the old manually */ if (strcmp (full_name, rule->name) != 0) { @@ -1109,7 +1111,7 @@ vfolder_load_storage (EMailBackend *backend) /* load our rules */ user = g_build_filename (config_dir, "vfolders.xml", NULL); - context = em_vfolder_context_new (session); + context = em_vfolder_context_new (backend); xmlfile = g_build_filename (EVOLUTION_PRIVDATADIR, "vfoldertypes.xml", NULL); if (e_rule_context_load ((ERuleContext *) context, @@ -1345,12 +1347,12 @@ vfolder_create_part (const gchar *name) /* clones a filter/search rule into a matching vfolder rule * (assuming the same system definitions) */ EFilterRule * -vfolder_clone_rule (EMailSession *session, EFilterRule *in) +vfolder_clone_rule (EMailBackend *backend, EFilterRule *in) { EFilterRule *rule; xmlNodePtr xml; - rule = em_vfolder_rule_new (session); + rule = em_vfolder_rule_new (backend); xml = e_filter_rule_xml_encode (in); e_filter_rule_xml_decode (rule, xml, (ERuleContext *) context); -- cgit v1.2.3 From c24038c4f62f37b89d1bda9542ca5ccc843d4ea0 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 27 May 2011 15:23:07 +0200 Subject: Bug #646109 - Fix use of include to make sure translations work --- mail/mail-vfolder.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 526e0ea1ad..12ddb0ecf3 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -20,7 +20,10 @@ * */ +#ifdef HAVE_CONFIG_H #include +#endif + #include #include -- cgit v1.2.3 From 7132d0f0c2b8494b3962792cd77ce3fcb5313687 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 28 May 2011 10:18:56 -0400 Subject: Including directly is rarely needed. --- mail/mail-vfolder.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 12ddb0ecf3..faa5a6ee26 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -26,8 +26,6 @@ #include -#include - #include #include -- cgit v1.2.3 From 56314d75e2b30367b4679298d5976a69957f66be Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 1 Jun 2011 05:12:45 -0400 Subject: mail_vfolder_add_folder(): Change parameters. Take an EMailBackend instead of an EMailSession. --- mail/mail-vfolder.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index faa5a6ee26..c8e7babf5d 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -416,7 +416,7 @@ folder_is_spethal (CamelStore *store, /** * mail_vfolder_add_folder: - * @session: an #EMailSession + * @backend: an #EMailBackend * @store: a #CamelStore * @folder: a folder name * @remove: whether the folder should be removed or added @@ -433,11 +433,12 @@ folder_is_spethal (CamelStore *store, * NOTE: This function must be called from the main thread. */ static void -mail_vfolder_add_folder (EMailSession *session, +mail_vfolder_add_folder (EMailBackend *backend, CamelStore *store, const gchar *folder_name, gint remove) { + EMailSession *session; EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; @@ -447,6 +448,8 @@ mail_vfolder_add_folder (EMailSession *session, gint is_ignore; gchar *uri; + session = e_mail_backend_get_session (backend); + provider = camel_service_get_provider (CAMEL_SERVICE (store)); remote = (provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0; @@ -1018,18 +1021,18 @@ static void folder_available_cb (MailFolderCache *cache, CamelStore *store, const gchar *folder_name, - EMailSession *session) + EMailBackend *backend) { - mail_vfolder_add_folder (session, store, folder_name, FALSE); + mail_vfolder_add_folder (backend, store, folder_name, FALSE); } static void folder_unavailable_cb (MailFolderCache *cache, CamelStore *store, const gchar *folder_name, - EMailSession *session) + EMailBackend *backend) { - mail_vfolder_add_folder (session, store, folder_name, TRUE); + mail_vfolder_add_folder (backend, store, folder_name, TRUE); } static void @@ -1156,10 +1159,10 @@ vfolder_load_storage (EMailBackend *backend) g_signal_connect ( folder_cache, "folder-available", - G_CALLBACK (folder_available_cb), session); + G_CALLBACK (folder_available_cb), backend); g_signal_connect ( folder_cache, "folder-unavailable", - G_CALLBACK (folder_unavailable_cb), session); + G_CALLBACK (folder_unavailable_cb), backend); g_signal_connect ( folder_cache, "folder-deleted", G_CALLBACK (folder_deleted_cb), backend); -- cgit v1.2.3 From 58f0ae7566c4a229787ee0ceef3cbf9504070c3f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 1 Jun 2011 13:40:19 -0400 Subject: EMVFolderRule: Track folder URIs in a GQueue instead of GList. Makes the logic a little cleaner. Do this also in mail-vfolder.c. --- mail/mail-vfolder.c | 84 +++++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 41 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index c8e7babf5d..20c420a4f4 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -60,8 +60,12 @@ CamelStore *vfolder_store; /* the 1 static vfolder store */ /* lock for accessing shared resources (below) */ G_LOCK_DEFINE_STATIC (vfolder); -static GList *source_folders_remote; /* list of source folder uri's - remote ones */ -static GList *source_folders_local; /* list of source folder uri's - local ones */ +/* list of source folder uri's - remote ones */ +static GQueue source_folders_remote = G_QUEUE_INIT; + +/* list of source folder uri's - local ones */ +static GQueue source_folders_local = G_QUEUE_INIT; + static GHashTable *vfolder_hash; /* This is a slightly hacky solution to shutting down, we poll this variable in various loops, and just quit processing if it is set. */ @@ -328,16 +332,21 @@ vfolder_adduri (EMailSession *session, /* ********************************************************************** */ static GList * -mv_find_folder (GList *l, EMailSession *session, const gchar *uri) +mv_find_folder (GQueue *queue, + EMailSession *session, + const gchar *uri) { CamelSession *camel_session = CAMEL_SESSION (session); + GList *head, *link; - while (l) { - if (e_mail_folder_uri_equal (camel_session, l->data, uri)) + head = g_queue_peek_head_link (queue); + + for (link = head; link != NULL; link = g_list_next (link)) { + if (e_mail_folder_uri_equal (camel_session, link->data, uri)) break; - l = l->next; } - return l; + + return link; } static gint @@ -444,6 +453,7 @@ mail_vfolder_add_folder (EMailBackend *backend, CamelVeeFolder *vf; CamelProvider *provider; GList *folders = NULL, *link; + GQueue *queue; gint remote; gint is_ignore; gchar *uri; @@ -452,6 +462,7 @@ mail_vfolder_add_folder (EMailBackend *backend, provider = camel_service_get_provider (CAMEL_SERVICE (store)); remote = (provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0; + queue = remote ? &source_folders_remote : &source_folders_local; if (folder_is_spethal (store, folder_name)) return; @@ -468,30 +479,15 @@ mail_vfolder_add_folder (EMailBackend *backend, if (CAMEL_IS_VEE_STORE (store)) { is_ignore = TRUE; } else if (remove) { - if (remote) { - if ((link = mv_find_folder (source_folders_remote, session, uri)) != NULL) { - g_free (link->data); - source_folders_remote = g_list_remove_link ( - source_folders_remote, link); - } - } else { - if ((link = mv_find_folder (source_folders_local, session, uri)) != NULL) { - g_free (link->data); - source_folders_local = g_list_remove_link ( - source_folders_local, link); - } + link = mv_find_folder (queue, session, uri); + if (link != NULL) { + g_free (link->data); + g_queue_delete_link (queue, link); } } else if (!is_ignore) { /* we ignore drafts/sent/outbox here */ - if (remote) { - if (mv_find_folder (source_folders_remote, session, uri) == NULL) - source_folders_remote = g_list_prepend ( - source_folders_remote, g_strdup (uri)); - } else { - if (mv_find_folder (source_folders_local, session, uri) == NULL) - source_folders_local = g_list_prepend ( - source_folders_local, g_strdup (uri)); - } + if (mv_find_folder (queue, session, uri) == NULL) + g_queue_push_tail (queue, g_strdup (uri)); } if (context == NULL) @@ -572,6 +568,7 @@ mail_vfolder_delete_folder (EMailBackend *backend, const gchar *source; CamelVeeFolder *vf; GString *changed; + GQueue *queue; guint changed_count; gchar *uri; GList *link; @@ -639,14 +636,18 @@ mail_vfolder_delete_folder (EMailBackend *backend, } done: - if ((link = mv_find_folder (source_folders_remote, session, uri)) != NULL) { + queue = &source_folders_remote; + link = mv_find_folder (queue, session, uri); + if (link != NULL) { g_free (link->data); - source_folders_remote = g_list_remove_link (source_folders_remote, link); + g_queue_delete_link (queue, link); } - if ((link = mv_find_folder (source_folders_local, session, uri)) != NULL) { + queue = &source_folders_local; + link = mv_find_folder (queue, session, uri); + if (link != NULL) { g_free (link->data); - source_folders_local = g_list_remove_link (source_folders_local, link); + g_queue_delete_link (queue, link); } G_UNLOCK (vfolder); @@ -761,13 +762,13 @@ mail_vfolder_rename_folder (CamelStore *store, GList * mail_vfolder_get_sources_local (void) { - return source_folders_local; + return g_queue_peek_head_link (&source_folders_local); } GList * mail_vfolder_get_sources_remote (void) { - return source_folders_remote; + return g_queue_peek_head_link (&source_folders_remote); } /* ********************************************************************** */ @@ -776,7 +777,7 @@ static void context_rule_added (ERuleContext *ctx, EFilterRule *rule); static void rule_add_sources (EMailSession *session, - GList *l, + GQueue *queue, GList **sources_folderp, GList **sources_urip) { @@ -784,11 +785,13 @@ rule_add_sources (EMailSession *session, GList *sources_uri = *sources_urip; MailFolderCache *folder_cache; CamelFolder *newfolder; + GList *head, *link; folder_cache = e_mail_session_get_folder_cache (session); - while (l) { - const gchar *uri = l->data; + head = g_queue_peek_head_link (queue); + for (link = head; link != NULL; link = g_list_next (link)) { + const gchar *uri = link->data; if (mail_folder_cache_get_folder_from_uri ( folder_cache, uri, &newfolder)) { @@ -799,7 +802,6 @@ rule_add_sources (EMailSession *session, sources_uri = g_list_append ( sources_uri, g_strdup (uri)); } - l = l->next; } *sources_folderp = sources_folder; @@ -849,7 +851,7 @@ rule_changed (EFilterRule *rule, CamelFolder *folder) /* find any (currently available) folders, and add them to the ones to open */ rule_add_sources ( - session, ((EMVFolderRule *) rule)->sources, + session, &((EMVFolderRule *) rule)->sources, &sources_folder, &sources_uri); G_LOCK (vfolder); @@ -858,14 +860,14 @@ rule_changed (EFilterRule *rule, CamelFolder *folder) ((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) rule_add_sources ( - session, source_folders_local, + session, &source_folders_local, &sources_folder, &sources_uri); if (((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_REMOTE_ACTIVE || ((EMVFolderRule *) rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE) rule_add_sources ( - session, source_folders_remote, + session, &source_folders_remote, &sources_folder, &sources_uri); G_UNLOCK (vfolder); -- cgit v1.2.3 From dc65d0dfeb1436daf42c6a4664ee35e5cfbe68f3 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 1 Jun 2011 17:08:41 -0400 Subject: vfolder_adduri(): Take an EMailBackend instead of EMailSession. Needed for the account-mgmt branch. --- mail/mail-vfolder.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 20c420a4f4..db03ef2ac4 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -199,7 +199,7 @@ vfolder_setup (EMailSession *session, struct _adduri_msg { MailMsg base; - EMailSession *session; + EMailBackend *backend; gchar *uri; GList *folders; gint remove; @@ -210,17 +210,18 @@ vfolder_adduri_desc (struct _adduri_msg *m) { EAccount *account; CamelStore *store; - CamelSession *session; - const gchar *store_name; + EMailSession *session; + const gchar *display_name; const gchar *uid; gchar *folder_name; gchar *description; gboolean success; - session = CAMEL_SESSION (m->session); + session = e_mail_backend_get_session (m->backend); success = e_mail_folder_uri_parse ( - session, m->uri, &store, &folder_name, NULL); + CAMEL_SESSION (session), m->uri, + &store, &folder_name, NULL); if (!success) return NULL; @@ -229,13 +230,13 @@ vfolder_adduri_desc (struct _adduri_msg *m) account = e_get_account_by_uid (uid); if (account != NULL) - store_name = account->name; + display_name = account->name; else - store_name = _("On This Computer"); + display_name = _("On This Computer"); description = g_strdup_printf ( _("Updating Search Folders for '%s' : %s"), - store_name, folder_name); + display_name, folder_name); g_object_unref (store); g_free (folder_name); @@ -249,13 +250,15 @@ vfolder_adduri_exec (struct _adduri_msg *m, GError **error) { GList *l; + EMailSession *session; CamelFolder *folder = NULL; MailFolderCache *folder_cache; if (vfolder_shutdown) return; - folder_cache = e_mail_session_get_folder_cache (m->session); + session = e_mail_backend_get_session (m->backend); + folder_cache = e_mail_session_get_folder_cache (session); /* we dont try lookup the cache if we are removing it, its no longer there */ @@ -269,7 +272,7 @@ vfolder_adduri_exec (struct _adduri_msg *m, if (folder == NULL) folder = e_mail_session_uri_to_folder_sync ( - m->session, m->uri, 0, cancellable, error); + session, m->uri, 0, cancellable, error); if (folder != NULL) { l = m->folders; @@ -293,7 +296,7 @@ vfolder_adduri_done (struct _adduri_msg *m) static void vfolder_adduri_free (struct _adduri_msg *m) { - g_object_unref (m->session); + g_object_unref (m->backend); g_list_foreach (m->folders, (GFunc) g_object_unref, NULL); g_list_free (m->folders); g_free (m->uri); @@ -309,7 +312,7 @@ static MailMsgInfo vfolder_adduri_info = { /* uri should be a camel uri */ static gint -vfolder_adduri (EMailSession *session, +vfolder_adduri (EMailBackend *backend, const gchar *uri, GList *folders, gint remove) @@ -318,7 +321,7 @@ vfolder_adduri (EMailSession *session, gint id; m = mail_msg_new (&vfolder_adduri_info); - m->session = g_object_ref (session); + m->backend = g_object_ref (backend); m->folders = folders; m->uri = g_strdup (uri); m->remove = remove; @@ -535,7 +538,7 @@ done: G_UNLOCK (vfolder); if (folders != NULL) - vfolder_adduri (session, uri, folders, remove); + vfolder_adduri (backend, uri, folders, remove); g_free (uri); } -- cgit v1.2.3 From e7954c3f251aabbf95d099159709c8c66dfedc44 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 4 Jun 2011 15:53:10 -0500 Subject: Coding style and whitespace cleanups. --- mail/mail-vfolder.c | 52 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index db03ef2ac4..4c46c4d84a 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -566,6 +566,7 @@ mail_vfolder_delete_folder (EMailBackend *backend, CamelStore *store, const gchar *folder_name) { + ERuleContext *rule_context; EFilterRule *rule; EMailSession *session; const gchar *source; @@ -598,31 +599,40 @@ mail_vfolder_delete_folder (EMailBackend *backend, if (context == NULL) goto done; + rule_context = E_RULE_CONTEXT (context); + /* see if any rules directly reference this removed uri */ rule = NULL; - while ((rule = e_rule_context_next_rule ((ERuleContext *) context, rule, NULL))) { + while ((rule = e_rule_context_next_rule (rule_context, rule, NULL))) { + EMVFolderRule *vf_rule = EM_VFOLDER_RULE (rule); - if (!rule->name) { - d(printf("invalid rule (%p): rule->name is set to NULL\n", rule)); + if (!rule->name) continue; - } source = NULL; - while ((source = em_vfolder_rule_next_source ((EMVFolderRule *) rule, source))) { + 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)) { - vf = g_hash_table_lookup (vfolder_hash, rule->name); + vf = g_hash_table_lookup ( + vfolder_hash, rule->name); + if (!vf) { g_warning ("vf is NULL for %s\n", rule->name); continue; } + g_signal_handlers_disconnect_matched ( rule, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, rule_changed, vf); - em_vfolder_rule_remove_source ((EMVFolderRule *) rule, source); - g_signal_connect (rule, "changed", G_CALLBACK(rule_changed), vf); + + em_vfolder_rule_remove_source (vf_rule, source); + + g_signal_connect ( + rule, "changed", + G_CALLBACK (rule_changed), vf); + if (changed_count == 0) { g_string_append (changed, rule->name); } else { @@ -630,8 +640,11 @@ mail_vfolder_delete_folder (EMailBackend *backend, g_string_prepend (changed, " "); g_string_append (changed, "\n"); } - g_string_append_printf (changed, " %s\n", rule->name); + g_string_append_printf ( + changed, " %s\n", + rule->name); } + changed_count++; source = NULL; } @@ -691,6 +704,7 @@ mail_vfolder_rename_folder (CamelStore *store, const gchar *old_folder_name, const gchar *new_folder_name) { + ERuleContext *rule_context; EFilterRule *rule; const gchar *source; CamelVeeFolder *vf; @@ -719,11 +733,15 @@ mail_vfolder_rename_folder (CamelStore *store, G_LOCK (vfolder); + rule_context = E_RULE_CONTEXT (context); + /* see if any rules directly reference this removed uri */ rule = NULL; - while ((rule = e_rule_context_next_rule ((ERuleContext *) context, rule, NULL))) { + while ((rule = e_rule_context_next_rule (rule_context, rule, NULL))) { + EMVFolderRule *vf_rule = EM_VFOLDER_RULE (rule); + source = NULL; - while ((source = em_vfolder_rule_next_source ((EMVFolderRule *) rule, source))) { + 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 (session, old_uri, source)) { @@ -732,13 +750,19 @@ mail_vfolder_rename_folder (CamelStore *store, g_warning ("vf is NULL for %s\n", rule->name); continue; } + g_signal_handlers_disconnect_matched ( rule, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, rule_changed, vf); - em_vfolder_rule_remove_source ((EMVFolderRule *) rule, source); - em_vfolder_rule_add_source ((EMVFolderRule *) rule, new_uri); - g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), vf); + + em_vfolder_rule_remove_source (vf_rule, source); + em_vfolder_rule_add_source (vf_rule, new_uri); + + g_signal_connect ( + vf_rule, "changed", + G_CALLBACK (rule_changed), vf); + changed++; source = NULL; } -- cgit v1.2.3 From a57097559c1c3985a20af5be9be50e489ddee001 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 1 Jul 2011 20:01:45 +0200 Subject: Bug #650671 - Service connect/disconnect not cancelled properly --- mail/mail-vfolder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 4c46c4d84a..64b31f3497 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1124,7 +1124,7 @@ vfolder_load_storage (EMailBackend *backend) CAMEL_SESSION (session), "vfolder", storeuri, CAMEL_PROVIDER_STORE, NULL); if (service != NULL) - camel_service_connect_sync (service, NULL); + em_utils_connect_service_sync (service, NULL, NULL); else { g_warning("Cannot open vfolder store - no vfolders available"); return; -- cgit v1.2.3 From 9b59286ea42a3db8b5d76f4e388b8691340b034c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 17 Aug 2011 21:21:22 -0400 Subject: Use new CamelService:display-name property. Simplify, simplify... --- mail/mail-vfolder.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 64b31f3497..a24d9dcb45 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -208,11 +208,10 @@ struct _adduri_msg { static gchar * vfolder_adduri_desc (struct _adduri_msg *m) { - EAccount *account; CamelStore *store; + CamelService *service; EMailSession *session; const gchar *display_name; - const gchar *uid; gchar *folder_name; gchar *description; gboolean success; @@ -226,13 +225,8 @@ vfolder_adduri_desc (struct _adduri_msg *m) if (!success) return NULL; - uid = camel_service_get_uid (CAMEL_SERVICE (store)); - account = e_get_account_by_uid (uid); - - if (account != NULL) - display_name = account->name; - else - display_name = _("On This Computer"); + service = CAMEL_SERVICE (store); + display_name = camel_service_get_display_name (service); description = g_strdup_printf ( _("Updating Search Folders for '%s' : %s"), @@ -1123,9 +1117,10 @@ vfolder_load_storage (EMailBackend *backend) service = camel_session_add_service ( CAMEL_SESSION (session), "vfolder", storeuri, CAMEL_PROVIDER_STORE, NULL); - if (service != NULL) + if (service != NULL) { + camel_service_set_display_name (service, _("Search Folders")); em_utils_connect_service_sync (service, NULL, NULL); - else { + } else { g_warning("Cannot open vfolder store - no vfolders available"); return; } @@ -1162,7 +1157,7 @@ vfolder_load_storage (EMailBackend *backend) G_CALLBACK (context_rule_removed), context); /* load store to mail component */ - e_mail_store_add (session, vfolder_store, _("Search Folders")); + e_mail_store_add (session, vfolder_store); /* and setup the rules we have */ rule = NULL; -- cgit v1.2.3 From f668cdde94f92c984269e6dbad407862962efd91 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 19 Aug 2011 17:57:47 +0200 Subject: Cannot add folder to previously saved Search folder --- mail/mail-vfolder.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index a24d9dcb45..2a7ed99893 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1248,6 +1248,25 @@ vfolder_edit (EShellView *shell_view) gtk_widget_destroy (dialog); } +static void +vfolder_edit_response_cb (GtkWidget *dialog, gint response_id, gpointer user_data) +{ + if (response_id == GTK_RESPONSE_OK) { + EFilterRule *rule = g_object_get_data (G_OBJECT (dialog), "vfolder-rule"); + EFilterRule *newrule = g_object_get_data (G_OBJECT (dialog), "vfolder-newrule"); + const gchar *config_dir; + gchar *user; + + e_filter_rule_copy (rule, newrule); + config_dir = mail_session_get_config_dir (); + user = g_build_filename (config_dir, "vfolders.xml", NULL); + e_rule_context_save ((ERuleContext *) context, user); + g_free (user); + } + + gtk_widget_destroy (dialog); +} + void vfolder_edit_rule (EMailBackend *backend, const gchar *folder_uri) @@ -1305,21 +1324,12 @@ vfolder_edit_rule (EMailBackend *backend, gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); gtk_widget_show (widget); - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { - const gchar *config_dir; - gchar *user; - - e_filter_rule_copy (rule, newrule); - config_dir = mail_session_get_config_dir (); - user = g_build_filename (config_dir, "vfolders.xml", NULL); - e_rule_context_save ((ERuleContext *) context, user); - g_free (user); - } + g_object_set_data_full (G_OBJECT (dialog), "vfolder-rule", rule, g_object_unref); + g_object_set_data_full (G_OBJECT (dialog), "vfolder-newrule", newrule, g_object_unref); - gtk_widget_destroy (dialog); + g_signal_connect (dialog, "response", G_CALLBACK (vfolder_edit_response_cb), NULL); - g_object_unref (rule); - g_object_unref (newrule); + gtk_widget_show (dialog); } static void -- cgit v1.2.3 From db1a2dd8aad57fb222daa6f82838b33a26f8e742 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 30 Aug 2011 19:05:30 -0400 Subject: Miscellaneous cleanups. Reducing diff noise with the account-mgmt branch. Trying to erode our dependency on EAccount as much as possible, or at least isolate its usage, to make things easier for me on the branch. --- mail/mail-vfolder.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 2a7ed99893..71431e3fe0 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -347,12 +347,13 @@ mv_find_folder (GQueue *queue, } static gint -uri_is_ignore (EMailSession *session, const gchar *uri) +uri_is_ignore (EMailBackend *backend, const gchar *uri) { + EMailSession *session; + CamelSession *camel_session; EAccountList *accounts; EAccount *account; EIterator *iter; - CamelSession *camel_session; const gchar *local_drafts_uri; const gchar *local_outbox_uri; const gchar *local_sent_uri; @@ -365,6 +366,7 @@ uri_is_ignore (EMailSession *session, const gchar *uri) local_sent_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_SENT); + session = e_mail_backend_get_session (backend); camel_session = CAMEL_SESSION (session); if (e_mail_folder_uri_equal (camel_session, local_outbox_uri, uri)) @@ -468,7 +470,7 @@ mail_vfolder_add_folder (EMailBackend *backend, uri = e_mail_folder_uri_build (store, folder_name); - is_ignore = uri_is_ignore (session, uri); + is_ignore = uri_is_ignore (backend, uri); G_LOCK (vfolder); -- cgit v1.2.3 From 777c1cbd40eb63365f2c28e38f6a93beb2d1c9d1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 16 Aug 2011 11:25:56 -0400 Subject: Coding style and whitespace cleanup. --- mail/mail-vfolder.c | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 71431e3fe0..78d0863e0c 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -68,7 +68,7 @@ static GQueue source_folders_local = G_QUEUE_INIT; static GHashTable *vfolder_hash; /* This is a slightly hacky solution to shutting down, we poll this variable in various - loops, and just quit processing if it is set. */ + * loops, and just quit processing if it is set. */ static volatile gint vfolder_shutdown; /* are we shutting down? */ static void rule_changed (EFilterRule *rule, CamelFolder *folder); @@ -347,7 +347,8 @@ mv_find_folder (GQueue *queue, } static gint -uri_is_ignore (EMailBackend *backend, const gchar *uri) +uri_is_ignore (EMailBackend *backend, + const gchar *uri) { EMailSession *session; CamelSession *camel_session; @@ -608,7 +609,7 @@ mail_vfolder_delete_folder (EMailBackend *backend, source = NULL; 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 */ + * because the adduri call above does the work async */ if (e_mail_folder_uri_equal (CAMEL_SESSION (session), uri, source)) { vf = g_hash_table_lookup ( vfolder_hash, rule->name); @@ -739,7 +740,7 @@ mail_vfolder_rename_folder (CamelStore *store, source = NULL; 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 */ + * because the adduri call above does the work async */ if (e_mail_folder_uri_equal (session, old_uri, source)) { vf = g_hash_table_lookup (vfolder_hash, rule->name); if (!vf) { @@ -832,7 +833,8 @@ rule_add_sources (EMailSession *session, } static void -rule_changed (EFilterRule *rule, CamelFolder *folder) +rule_changed (EFilterRule *rule, + CamelFolder *folder) { EMailBackend *backend; EMailSession *session; @@ -915,7 +917,7 @@ context_rule_added (ERuleContext *ctx, folder = camel_store_get_folder_sync ( vfolder_store, rule->name, 0, NULL, NULL); if (folder) { - g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), folder); + g_signal_connect (rule, "changed", G_CALLBACK(rule_changed), folder); G_LOCK (vfolder); g_hash_table_insert (vfolder_hash, g_strdup (rule->name), folder); @@ -1025,10 +1027,10 @@ store_folder_renamed_cb (CamelStore *store, } g_signal_handlers_disconnect_matched ( - rule, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, + rule, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, rule_changed, folder); e_filter_rule_set_name (rule, info->full_name); - g_signal_connect(rule, "changed", G_CALLBACK(rule_changed), folder); + g_signal_connect (rule, "changed", G_CALLBACK(rule_changed), folder); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "vfolders.xml", NULL); @@ -1251,7 +1253,9 @@ vfolder_edit (EShellView *shell_view) } static void -vfolder_edit_response_cb (GtkWidget *dialog, gint response_id, gpointer user_data) +vfolder_edit_response_cb (GtkWidget *dialog, + gint response_id, + gpointer user_data) { if (response_id == GTK_RESPONSE_OK) { EFilterRule *rule = g_object_get_data (G_OBJECT (dialog), "vfolder-rule"); @@ -1335,7 +1339,9 @@ vfolder_edit_rule (EMailBackend *backend, } static void -new_rule_clicked (GtkWidget *w, gint button, gpointer data) +new_rule_clicked (GtkWidget *w, + gint button, + gpointer data) { if (button == GTK_RESPONSE_OK) { const gchar *config_dir; @@ -1369,7 +1375,8 @@ new_rule_clicked (GtkWidget *w, gint button, gpointer data) } static void -new_rule_changed_cb (EFilterRule *rule, GtkDialog *dialog) +new_rule_changed_cb (EFilterRule *rule, + GtkDialog *dialog) { g_return_if_fail (rule != NULL); g_return_if_fail (dialog != NULL); @@ -1387,7 +1394,8 @@ vfolder_create_part (const gchar *name) /* clones a filter/search rule into a matching vfolder rule * (assuming the same system definitions) */ EFilterRule * -vfolder_clone_rule (EMailBackend *backend, EFilterRule *in) +vfolder_clone_rule (EMailBackend *backend, + EFilterRule *in) { EFilterRule *rule; xmlNodePtr xml; @@ -1429,9 +1437,9 @@ vfolder_gui_add_rule (EMVFolderRule *rule) gtk_box_pack_start (GTK_BOX (container), w, TRUE, TRUE, 0); gtk_widget_show ((GtkWidget *) gd); g_object_set_data_full(G_OBJECT(gd), "rule", rule, (GDestroyNotify)g_object_unref); - g_signal_connect(rule, "changed", G_CALLBACK (new_rule_changed_cb), gd); - new_rule_changed_cb ((EFilterRule*) rule, gd); - g_signal_connect(gd, "response", G_CALLBACK(new_rule_clicked), NULL); + g_signal_connect (rule, "changed", G_CALLBACK (new_rule_changed_cb), gd); + new_rule_changed_cb ((EFilterRule *) rule, gd); + g_signal_connect (gd, "response", G_CALLBACK(new_rule_clicked), NULL); gtk_widget_show ((GtkWidget *) gd); } @@ -1445,7 +1453,7 @@ vfolder_gui_add_from_message (EMailSession *session, g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); - rule = (EMVFolderRule*) em_vfolder_rule_from_message ( + rule = (EMVFolderRule *) em_vfolder_rule_from_message ( context, message, flags, folder); vfolder_gui_add_rule (rule); } @@ -1460,13 +1468,15 @@ vfolder_gui_add_from_address (EMailSession *session, g_return_if_fail (addr != NULL); - rule = (EMVFolderRule*) em_vfolder_rule_from_address ( + rule = (EMVFolderRule *) em_vfolder_rule_from_address ( context, addr, flags, folder); vfolder_gui_add_rule (rule); } static void -vfolder_foreach_cb (gpointer key, gpointer data, gpointer user_data) +vfolder_foreach_cb (gpointer key, + gpointer data, + gpointer user_data) { CamelFolder *folder = CAMEL_FOLDER (data); -- cgit v1.2.3 From 3b32549c69267295a9a7b482e4a6ca2db9e6c73f Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Wed, 19 Oct 2011 18:24:07 +0200 Subject: And yet more GSettings migration on the mail component --- mail/mail-vfolder.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'mail/mail-vfolder.c') diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index c1e451d04c..f2f9219b89 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1096,7 +1096,7 @@ vfolder_load_storage (EMailBackend *backend) MailFolderCache *folder_cache; EMailSession *session; gchar *xmlfile; - GConfClient *client; + GSettings *settings; g_return_if_fail (E_IS_MAIL_BACKEND (backend)); @@ -1177,11 +1177,11 @@ vfolder_load_storage (EMailBackend *backend) g_free (storeuri); /* reenable the feature if required */ - client = gconf_client_get_default (); - key = "/apps/evolution/mail/display/enable_vfolders"; - if (!gconf_client_get_bool (client, key, NULL)) - gconf_client_set_bool (client, key, TRUE, NULL); - g_object_unref (client); + settings = g_settings_new ("org.gnome.evolution.mail"); + key = "enable-vfolders"; + if (!g_settings_get_boolean (settings, key)) + g_settings_set_boolean (settings, key, TRUE); + g_object_unref (settings); folder_cache = e_mail_session_get_folder_cache (session); -- cgit v1.2.3