diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2003-01-18 07:31:27 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2003-01-18 07:31:27 +0800 |
commit | e0053bce8e3e5e7f18bea009f3bbfb1e51234f65 (patch) | |
tree | aa2bee9193f6123438c829c326050a4ebd48dc58 /mail/mail-account-gui.c | |
parent | 650c61584f8970de2cd9c9915dade6843d386191 (diff) | |
download | gsoc2013-evolution-e0053bce8e3e5e7f18bea009f3bbfb1e51234f65.tar.gz gsoc2013-evolution-e0053bce8e3e5e7f18bea009f3bbfb1e51234f65.tar.zst gsoc2013-evolution-e0053bce8e3e5e7f18bea009f3bbfb1e51234f65.zip |
Updated. (request_password): Same.
2003-01-17 Jeffrey Stedfast <fejj@ximian.com>
* mail-session.c (do_get_pass): Updated.
(request_password): Same.
* mail-send-recv.c (mail_send): Fixed to use EAccountService.
* mail-config-druid.c (make_account): Updated to use EAccount and
friends.
* mail-account-gui.c (service_check_supported): Updated to use
EAccountService.
(mail_account_gui_new): Ref the account passed in and also update
to use EAccount objects.
(save_service): Updated to use an EAccountService.
(add_new_store): Updated to use an EAccount.
(mail_account_gui_save): Updated to use EAccounts.
(setup_signatures): Updated because the new account->id->def_sig
is now an int and not a structure pointer.
* mail-account-editor.c (construct): Updated.
(mail_account_editor_new): Now takes an EAccount object as an
argument instead of a MailConfigAccount.
* mail-crypto.c (mail_crypto_get_pgp_cipher_context): Updated to
use EAccounts.
* subscribe-dialog.c (populate_store_foreach): Removed.
(populate_store_list): Can't use populate_store_foreach here
because of the change to EAccountList so do it manually.
* mail-vfolder.c (uri_is_ignore): Rewrote to use EAccountList and
EIterator and all that fun.
* mail-send-recv.c (build_dialogue): Updated to use EAccountList
and EAccount object stuff. *ugh*
(mail_send_receive): Here too.
(mail_autoreceive_setup): Same.
* mail-callbacks.c (check_send_configuration): Updated.
(composer_get_message): Updated.
(compose_msg): "
(list_add_addresses): "
(guess_me): "
(guess_me_from_accounts): Same.
(forward_get_composer): Here too.
(mail_generate_reply): Same.
(redirect_get_composer): "
(empty_trash): And finally here.
* mail-accounts.c (account_edit_clicked): Updated.
(account_delete_clicked): Same.
(account_default_clicked): Here too.
(account_able_clicked): "
(account_cursor_change): "
(mail_accounts_load): Again here.
* folder-browser.c (folder_browser_is_drafts): Updated to use
EAccountList and EAccount stuff.
(folder_browser_is_sent): Same.
* component-factory.c (mail_load_storages): Updated to use
EAccount and EAccountList stuff.
(owner_set_cb): Same.
(send_receive_cb): Here too.
* mail-config.c: Rewritten to use EAccount and EAccountList
objects.
svn path=/trunk/; revision=19509
Diffstat (limited to 'mail/mail-account-gui.c')
-rw-r--r-- | mail/mail-account-gui.c | 174 |
1 files changed, 90 insertions, 84 deletions
diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c index da8b35074b..11587f886c 100644 --- a/mail/mail-account-gui.c +++ b/mail/mail-account-gui.c @@ -50,7 +50,7 @@ extern char *default_drafts_folder_uri, *default_sent_folder_uri; extern EvolutionShellClient *global_shell_client; -static void save_service (MailAccountGuiService *gsvc, GHashTable *extra_conf, MailConfigService *service); +static void save_service (MailAccountGuiService *gsvc, GHashTable *extra_conf, EAccountService *service); static void service_changed (GtkEntry *entry, gpointer user_data); struct { @@ -668,12 +668,12 @@ static void service_check_supported (GtkButton *button, gpointer user_data) { MailAccountGuiService *gsvc = user_data; - MailConfigService *service; + EAccountService *service; GList *authtypes = NULL; GtkWidget *authitem; GtkWidget *window; - service = g_new0 (MailConfigService, 1); + service = g_new0 (EAccountService, 1); /* This is sort of a hack, when checking for supported AUTH types we don't want to use whatever authtype is selected @@ -696,7 +696,8 @@ service_check_supported (GtkButton *button, gpointer user_data) g_list_free (authtypes); } - service_destroy (service); + g_free (service->url); + g_free (service); } @@ -1069,7 +1070,7 @@ mail_account_gui_folder_selector_button_new (char *widget_name, } static gboolean -setup_service (MailAccountGuiService *gsvc, MailConfigService *service) +setup_service (MailAccountGuiService *gsvc, EAccountService *service) { CamelURL *url = camel_url_new (service->url, NULL); gboolean has_auth = FALSE; @@ -1282,7 +1283,13 @@ sig_add_new_signature (GtkWidget *w, MailAccountGui *gui) static void setup_signatures (MailAccountGui *gui) { - gui->def_signature = gui->account->id->def_signature; + MailConfigSignature *sig; + GSList *signatures; + + signatures = mail_config_get_signature_list (); + sig = g_slist_nth_data (signatures, gui->account->id->def_signature); + + gui->def_signature = sig; gui->auto_signature = gui->account->id->auto_signature; gtk_option_menu_set_history (GTK_OPTION_MENU (gui->sig_option_menu), sig_gui_get_index (gui)); } @@ -1366,12 +1373,14 @@ prepare_signatures (MailAccountGui *gui) } MailAccountGui * -mail_account_gui_new (MailConfigAccount *account, MailAccountsTab *dialog) +mail_account_gui_new (EAccount *account, MailAccountsTab *dialog) { const char *allowed_types[] = { "mail/*", NULL }; MailAccountGui *gui; GtkWidget *button; + g_object_ref (account); + gui = g_new0 (MailAccountGui, 1); gui->account = account; gui->dialog = dialog; @@ -1394,18 +1403,16 @@ mail_account_gui_new (MailConfigAccount *account, MailAccountsTab *dialog) prepare_signatures (gui); - if (account->id) { - if (account->id->name) - gtk_entry_set_text (gui->full_name, account->id->name); - if (account->id->address) - gtk_entry_set_text (gui->email_address, account->id->address); - if (account->id->reply_to) - gtk_entry_set_text (gui->reply_to, account->id->reply_to); - if (account->id->organization) - gtk_entry_set_text (gui->organization, account->id->organization); - - setup_signatures (gui); - } + if (account->id->name) + gtk_entry_set_text (gui->full_name, account->id->name); + if (account->id->address) + gtk_entry_set_text (gui->email_address, account->id->address); + if (account->id->reply_to) + gtk_entry_set_text (gui->reply_to, account->id->reply_to); + if (account->id->organization) + gtk_entry_set_text (gui->organization, account->id->organization); + + setup_signatures (gui); /* Source */ gui->source.provider_type = CAMEL_PROVIDER_STORE; @@ -1719,8 +1726,7 @@ mail_account_gui_setup (MailAccountGui *gui, GtkWidget *top) } static void -save_service (MailAccountGuiService *gsvc, GHashTable *extra_config, - MailConfigService *service) +save_service (MailAccountGuiService *gsvc, GHashTable *extra_config, EAccountService *service) { CamelURL *url; const char *str; @@ -1798,7 +1804,7 @@ save_service (MailAccountGuiService *gsvc, GHashTable *extra_config, static void add_new_store (char *uri, CamelStore *store, void *user_data) { - const MailConfigAccount *account = user_data; + EAccount *account = user_data; EvolutionStorage *storage; if (store == NULL) @@ -1817,12 +1823,13 @@ add_new_store (char *uri, CamelStore *store, void *user_data) gboolean mail_account_gui_save (MailAccountGui *gui) { - MailConfigAccount *account = gui->account; - MailConfigAccount *old_account; + EAccount *account, *new; CamelProvider *provider = NULL; CamelURL *source_url = NULL, *url; + gboolean is_new = FALSE; const char *new_name; gboolean is_storage; + GSList *signatures; if (!mail_account_gui_identity_complete (gui, NULL) || !mail_account_gui_source_complete (gui, NULL) || @@ -1830,67 +1837,63 @@ mail_account_gui_save (MailAccountGui *gui) !mail_account_gui_management_complete (gui, NULL)) return FALSE; + new = gui->account; + /* this would happen at an inconvenient time in the druid, * but the druid performs its own check so this can't happen * here. */ new_name = gtk_entry_get_text (gui->account_name); - old_account = (MailConfigAccount *) mail_config_get_account_by_name (new_name); + account = mail_config_get_account_by_name (new_name); - if (old_account && old_account != account) { - e_notice (NULL, GTK_MESSAGE_ERROR, - _("You may not create two accounts with the same name.")); + if (account && account != new) { + e_notice (NULL, GTK_MESSAGE_ERROR, _("You may not create two accounts with the same name.")); return FALSE; } - /* make a copy of the old account for later use... */ - old_account = account_copy (account); + account = new; - g_free (account->name); - account->name = g_strdup (new_name); + new = e_account_new (); + new->name = g_strdup (new_name); + new->enabled = account->enabled; /* construct the identity */ - identity_destroy (account->id); - account->id = g_new0 (MailConfigIdentity, 1); - account->id->name = g_strdup (gtk_entry_get_text (gui->full_name)); - account->id->address = g_strdup (gtk_entry_get_text (gui->email_address)); - account->id->reply_to = g_strdup (gtk_entry_get_text (gui->reply_to)); - account->id->organization = g_strdup (gtk_entry_get_text (gui->organization)); + new->id->name = g_strdup (gtk_entry_get_text (gui->full_name)); + new->id->address = g_strdup (gtk_entry_get_text (gui->email_address)); + new->id->reply_to = g_strdup (gtk_entry_get_text (gui->reply_to)); + new->id->organization = g_strdup (gtk_entry_get_text (gui->organization)); /* signatures */ - account->id->def_signature = gui->def_signature; - account->id->auto_signature = gui->auto_signature; - - service_destroy (account->source); - account->source = g_new0 (MailConfigService, 1); - save_service (&gui->source, gui->extra_config, account->source); - if (account->source->url) { - provider = camel_session_get_provider (session, account->source->url, NULL); - source_url = provider ? camel_url_new (account->source->url, NULL) : NULL; + signatures = mail_config_get_signature_list (); + new->id->def_signature = g_slist_index (signatures, gui->def_signature); + new->id->auto_signature = gui->auto_signature; + + /* source */ + save_service (&gui->source, gui->extra_config, new->source); + if (new->source->url) { + provider = camel_session_get_provider (session, new->source->url, NULL); + source_url = provider ? camel_url_new (new->source->url, NULL) : NULL; } - account->source->auto_check = gtk_toggle_button_get_active (gui->source_auto_check); - if (account->source->auto_check) - account->source->auto_check_time = gtk_spin_button_get_value_as_int (gui->source_auto_check_min); + new->source->auto_check = gtk_toggle_button_get_active (gui->source_auto_check); + if (new->source->auto_check) + new->source->auto_check_time = gtk_spin_button_get_value_as_int (gui->source_auto_check_min); - service_destroy (account->transport); - account->transport = g_new0 (MailConfigService, 1); + /* transport */ if (CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT (gui->transport.provider)) { /* The transport URI is the same as the source URI. */ - save_service (&gui->source, gui->extra_config, account->transport); + save_service (&gui->source, gui->extra_config, new->transport); } else - save_service (&gui->transport, NULL, account->transport); + save_service (&gui->transport, NULL, new->transport); /* Check to make sure that the Drafts folder uri is "valid" before assigning it */ url = source_url && gui->drafts_folder_uri ? camel_url_new (gui->drafts_folder_uri, NULL) : NULL; if (mail_config_get_account_by_source_url (gui->drafts_folder_uri) || (url && provider->url_equal (source_url, url))) { - g_free (account->drafts_folder_uri); - account->drafts_folder_uri = g_strdup (gui->drafts_folder_uri); + new->drafts_folder_uri = g_strdup (gui->drafts_folder_uri); } else { /* assign defaults - the uri is unknown to us (probably pointed to an old source url) */ - g_free (account->drafts_folder_uri); - account->drafts_folder_uri = g_strdup (default_drafts_folder_uri); + new->drafts_folder_uri = g_strdup (default_drafts_folder_uri); } if (url) @@ -1900,12 +1903,10 @@ mail_account_gui_save (MailAccountGui *gui) url = source_url && gui->sent_folder_uri ? camel_url_new (gui->sent_folder_uri, NULL) : NULL; if (mail_config_get_account_by_source_url (gui->sent_folder_uri) || (url && provider->url_equal (source_url, url))) { - g_free (account->sent_folder_uri); - account->sent_folder_uri = g_strdup (gui->sent_folder_uri); + new->sent_folder_uri = g_strdup (gui->sent_folder_uri); } else { /* assign defaults - the uri is unknown to us (probably pointed to an old source url) */ - g_free (account->sent_folder_uri); - account->sent_folder_uri = g_strdup (default_sent_folder_uri); + new->sent_folder_uri = g_strdup (default_sent_folder_uri); } if (url) @@ -1914,44 +1915,46 @@ mail_account_gui_save (MailAccountGui *gui) if (source_url) camel_url_free (source_url); - account->always_cc = gtk_toggle_button_get_active (gui->always_cc); - account->cc_addrs = g_strdup (gtk_entry_get_text (gui->cc_addrs)); - account->always_bcc = gtk_toggle_button_get_active (gui->always_bcc); - account->bcc_addrs = g_strdup (gtk_entry_get_text (gui->bcc_addrs)); + new->always_cc = gtk_toggle_button_get_active (gui->always_cc); + new->cc_addrs = g_strdup (gtk_entry_get_text (gui->cc_addrs)); + new->always_bcc = gtk_toggle_button_get_active (gui->always_bcc); + new->bcc_addrs = g_strdup (gtk_entry_get_text (gui->bcc_addrs)); - g_free (account->pgp_key); - account->pgp_key = g_strdup (gtk_entry_get_text (gui->pgp_key)); - account->pgp_encrypt_to_self = gtk_toggle_button_get_active (gui->pgp_encrypt_to_self); - account->pgp_always_sign = gtk_toggle_button_get_active (gui->pgp_always_sign); - account->pgp_no_imip_sign = gtk_toggle_button_get_active (gui->pgp_no_imip_sign); - account->pgp_always_trust = gtk_toggle_button_get_active (gui->pgp_always_trust); + new->pgp_key = g_strdup (gtk_entry_get_text (gui->pgp_key)); + new->pgp_encrypt_to_self = gtk_toggle_button_get_active (gui->pgp_encrypt_to_self); + new->pgp_always_sign = gtk_toggle_button_get_active (gui->pgp_always_sign); + new->pgp_no_imip_sign = gtk_toggle_button_get_active (gui->pgp_no_imip_sign); + new->pgp_always_trust = gtk_toggle_button_get_active (gui->pgp_always_trust); #if defined (HAVE_NSS) && defined (SMIME_SUPPORTED) - g_free (account->smime_key); - account->smime_key = g_strdup (gtk_entry_get_text (gui->smime_key)); - account->smime_encrypt_to_self = gtk_toggle_button_get_active (gui->smime_encrypt_to_self); - account->smime_always_sign = gtk_toggle_button_get_active (gui->smime_always_sign); + new->smime_key = g_strdup (gtk_entry_get_text (gui->smime_key)); + new->smime_encrypt_to_self = gtk_toggle_button_get_active (gui->smime_encrypt_to_self); + new->smime_always_sign = gtk_toggle_button_get_active (gui->smime_always_sign); #endif /* HAVE_NSS && SMIME_SUPPORTED */ is_storage = provider && (provider->flags & CAMEL_PROVIDER_IS_STORAGE) && !(provider->flags & CAMEL_PROVIDER_IS_EXTERNAL); if (!mail_config_find_account (account)) { - /* this is a new account so it it to our account-list */ - mail_config_add_account (account); - } else if (old_account->source && old_account->source->url) { + /* this is a new account so add it to our account-list */ + is_new = TRUE; + } else if (account->source->url) { /* this means the account was edited - if the old and new source urls are not identical, replace the old storage with the new storage */ #define sources_equal(old,new) (new->url && !strcmp (old->url, new->url)) - if (!sources_equal (old_account->source, account->source)) { + if (!sources_equal (account->source, new->source)) { /* Remove the old storage from the folder-tree */ - mail_remove_storage_by_uri (old_account->source->url); + mail_remove_storage_by_uri (account->source->url); } } - /* destroy the copy of the old account */ - account_destroy (old_account); + /* update the old account with the new settings */ + e_account_import (account, new); + g_object_unref (new); + + if (is_new) + mail_config_add_account (account); /* if the account provider is something we can stick in the folder-tree and not added by some other @@ -1976,10 +1979,13 @@ mail_account_gui_destroy (MailAccountGui *gui) { if (gui->dialog) mail_config_signature_unregister_client ((MailConfigSignatureClient) sig_event_client, gui); - + g_object_unref (gui->xml); + g_object_unref (gui->account); + if (gui->extra_config) g_hash_table_destroy (gui->extra_config); + g_free (gui->drafts_folder_uri); g_free (gui->sent_folder_uri); g_free (gui); |