From 7d9c68cbe5307c661480506c53c6e0c4db56d98e Mon Sep 17 00:00:00 2001 From: Shreyas Srinivasan Date: Sun, 10 Jul 2005 10:03:56 +0000 Subject: Add new functions to remove proxy accounts and proxies created by the 2005-07-10 Shreyas Srinivasan * mail-config.[ch]: Add new functions to remove proxy accounts and proxies created by the account. * mail-compnent.c: Remove proxy accounts at startup * mail.error.xml: Add warnings for proxy disable and removal of a proxy when its parents are removed. * em-account-prefs.c: Add checks not to display proxies and handling of parent removal/ disabling. svn path=/trunk/; revision=29698 --- mail/ChangeLog | 10 ++++++ mail/em-account-prefs.c | 94 ++++++++++++++++++++++++++++++++----------------- mail/mail-component.c | 2 ++ mail/mail-config.c | 18 ++++++++++ mail/mail-config.h | 4 +++ mail/mail.error.xml | 9 +++++ 6 files changed, 104 insertions(+), 33 deletions(-) diff --git a/mail/ChangeLog b/mail/ChangeLog index ae5efa8bd0..810b854133 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,13 @@ +2005-07-10 Shreyas Srinivasan + + * mail-config.[ch]: Add new functions to remove proxy accounts and + proxies created by the account. + * mail-compnent.c: Remove proxy accounts at startup + * mail.error.xml: Add warnings for proxy disable and removal of a + proxy when its parents are removed. + * em-account-prefs.c: Add checks not to display proxies and + handling of parent removal/ disabling. + 2005-07-06 Vivek Jain * em-junk-filter.c : moved to plugins/sa-junk-plugin diff --git a/mail/em-account-prefs.c b/mail/em-account-prefs.c index 0378bc769e..a3c2256525 100644 --- a/mail/em-account-prefs.c +++ b/mail/em-account-prefs.c @@ -192,7 +192,7 @@ account_edit_clicked (GtkButton *button, gpointer user_data) if (gtk_tree_selection_get_selected (selection, &model, &iter)) gtk_tree_model_get (model, &iter, 3, &account, -1); - if (account) { + if (account && !account->parent_uid && !mail_config_has_proxies (account)) { EMAccountEditor *emae; /** @HookPoint-EMConfig: Mail Account Editor @@ -227,6 +227,7 @@ account_delete_clicked (GtkButton *button, gpointer user_data) GtkTreeModel *model; GtkTreeIter iter; int ans; + gboolean has_proxies = FALSE; selection = gtk_tree_view_get_selection (prefs->table); if (gtk_tree_selection_get_selected (selection, &model, &iter)) @@ -235,8 +236,10 @@ account_delete_clicked (GtkButton *button, gpointer user_data) /* make sure we have a valid account selected and that we aren't editing anything... */ if (account == NULL || prefs->editor != NULL) return; - - ans = e_error_run(PREFS_WINDOW(prefs), "mail:ask-delete-account", NULL); + + has_proxies = mail_config_has_proxies (account); + ans = e_error_run(PREFS_WINDOW(prefs), has_proxies?"mail:ask-delete-account-with-proxies":"mail:ask-delete-account",NULL); + if (ans == GTK_RESPONSE_YES) { int len; @@ -244,6 +247,10 @@ account_delete_clicked (GtkButton *button, gpointer user_data) if (account->enabled && account->source && account->source->url) mail_component_remove_store_by_uri (mail_component_peek (), account->source->url); + /* remove all the proxies account has created*/ + if (has_proxies) + mail_config_remove_account_proxies (account); + /* remove it from the config file */ mail_config_remove_account (account); accounts = mail_config_get_accounts (); @@ -298,7 +305,7 @@ account_able_changed(EAccount *account) mail_component_load_store_by_uri (component, account->source->url, account->name); - else + else mail_component_remove_store_by_uri (component, account->source->url); } @@ -323,8 +330,8 @@ account_able_clicked (GtkButton *button, gpointer user_data) gtk_button_set_label (prefs->mail_able, account->enabled ? _("Disable") : _("Enable")); /* let the rest of the application know it changed */ - e_account_list_change(mail_config_get_accounts(), account); - account_able_changed(account); + e_account_list_change (mail_config_get_accounts(), account); + account_able_changed (account); } } @@ -344,17 +351,32 @@ account_able_toggled (GtkCellRendererToggle *renderer, char *arg1, gpointer user if (gtk_tree_model_get_iter (model, &iter, path)) { gtk_tree_model_get (model, &iter, 3, &account, -1); + + if (mail_config_has_proxies (account)) { + int ans; + + ans = e_error_run(PREFS_WINDOW(prefs), "mail:ask-delete-proxy-accounts",NULL); + + if (ans == GTK_RESPONSE_NO) { + gtk_tree_path_free (path); + return; + } + + mail_config_remove_account_proxies (account); + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), 1); + } + account->enabled = !account->enabled; + e_account_list_change(mail_config_get_accounts(), account); + account_able_changed (account); gtk_list_store_set ((GtkListStore *) model, &iter, 0, account->enabled, -1); - + if (gtk_tree_selection_iter_is_selected (selection, &iter)) gtk_button_set_label (prefs->mail_able, account->enabled ? _("Disable") : _("Enable")); /* let the rest of the application know it changed */ - e_account_list_change(mail_config_get_accounts(), account); - account_able_changed(account); } - + gtk_tree_path_free (path); } @@ -371,6 +393,7 @@ account_cursor_change (GtkTreeSelection *selection, EMAccountPrefs *prefs) EAccount *account = NULL; GtkTreeModel *model; GtkTreeIter iter; + const char *url = NULL; int state; state = gconf_client_key_is_writable(mail_config_get_gconf_client(), "/apps/evolution/mail/accounts", NULL); @@ -378,6 +401,7 @@ account_cursor_change (GtkTreeSelection *selection, EMAccountPrefs *prefs) state = gtk_tree_selection_get_selected (selection, &model, &iter); if (state) { gtk_tree_model_get (model, &iter, 3, &account, -1); + url = e_account_get_string (account, E_ACCOUNT_SOURCE_URL); if (account->source && account->enabled) gtk_button_set_label (prefs->mail_able, _("Disable")); else @@ -389,8 +413,10 @@ account_cursor_change (GtkTreeSelection *selection, EMAccountPrefs *prefs) } else { gtk_widget_set_sensitive (GTK_WIDGET (prefs), FALSE); } + + if( url != NULL ) + gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), !mail_config_has_proxies(account)); - gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_edit), state); gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_delete), state); gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_default), state); gtk_widget_set_sensitive (GTK_WIDGET (prefs->mail_able), state); @@ -419,31 +445,33 @@ mail_accounts_load (EMAccountPrefs *prefs) CamelURL *url; account = (EAccount *) e_iterator_get (node); + + if (!account->parent_uid) { + url = account->source && account->source->url ? camel_url_new (account->source->url, NULL) : NULL; + + gtk_list_store_append (model, &iter); + if (account == default_account) { + /* translators: default account indicator */ + name = val = g_strdup_printf ("%s %s", account->name, _("[Default]")); + } else { + val = account->name; + name = NULL; + } + + gtk_list_store_set (model, &iter, + 0, account->enabled, + 1, val, + 2, url && url->protocol ? url->protocol : (char *) _("None"), + 3, account, + -1); + g_free (name); + + if (url) + camel_url_free (url); - url = account->source && account->source->url ? camel_url_new (account->source->url, NULL) : NULL; - - gtk_list_store_append (model, &iter); - if (account == default_account) { - /* translators: default account indicator */ - name = val = g_strdup_printf ("%s %s", account->name, _("[Default]")); - } else { - val = account->name; - name = NULL; + row++; } - gtk_list_store_set (model, &iter, - 0, account->enabled, - 1, val, - 2, url && url->protocol ? url->protocol : (char *) _("None"), - 3, account, - -1); - g_free (name); - - if (url) - camel_url_free (url); - - row++; - e_iterator_next (node); } diff --git a/mail/mail-component.c b/mail/mail-component.c index ac6453de28..b8aa43d910 100644 --- a/mail/mail-component.c +++ b/mail/mail-component.c @@ -359,6 +359,7 @@ mc_startup(MailComponent *mc) started = 1; mc_setup_local_store(mc); + mail_config_prune_proxies (); load_accounts(mc, mail_config_get_accounts()); vfolder_load_storage(); } @@ -711,6 +712,7 @@ impl_quit(PortableServer_Servant servant, CORBA_Environment *ev) { MailComponent *mc = MAIL_COMPONENT(bonobo_object_from_servant(servant)); + mail_config_prune_proxies (); switch (mc->priv->quit_state) { case MC_QUIT_START: { int now = time(NULL)/60/60/24, days; diff --git a/mail/mail-config.c b/mail/mail-config.c index 72fa5c6695..520aec3091 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -671,6 +671,24 @@ mail_config_get_account_by_transport_url (const char *transport_url) return NULL; } +int +mail_config_has_proxies (EAccount *account) +{ + return e_account_list_account_has_proxies (config->accounts, account); +} + +void +mail_config_remove_account_proxies (EAccount *account) +{ + e_account_list_remove_account_proxies (config->accounts, account); +} + +void +mail_config_prune_proxies (void) +{ + e_account_list_prune_proxies (config->accounts); +} + EAccountList * mail_config_get_accounts (void) { diff --git a/mail/mail-config.h b/mail/mail-config.h index 679dabeb7d..ec8fd74b5b 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -134,6 +134,10 @@ void mail_config_add_account (struct _EAccount *account); void mail_config_remove_account (struct _EAccount *account); void mail_config_set_default_account (struct _EAccount *account); +void mail_config_remove_account_proxies (struct _EAccount *account); +void mail_config_prune_proxies (void); +int mail_config_has_proxies (struct _EAccount *account); + struct _EAccountIdentity *mail_config_get_default_identity (void); struct _EAccountService *mail_config_get_default_transport (void); diff --git a/mail/mail.error.xml b/mail/mail.error.xml index d769aad1c2..5cb2138bdb 100644 --- a/mail/mail.error.xml +++ b/mail/mail.error.xml @@ -249,6 +249,15 @@ The message is stored in the Outbox folder. Check the message for errors and re