diff options
author | Jeffrey Stedfast <fejj@helixcode.com> | 2001-01-08 07:12:11 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-01-08 07:12:11 +0800 |
commit | d53b9af629fcf4b77417edb0e4207fb1e2f28e0f (patch) | |
tree | d1f70954ab61f553b25e1c3c04e6c161afae28bd /mail | |
parent | 41f38d962e5192f5d0c168042a4f078cd84ac184 (diff) | |
download | gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.tar gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.tar.gz gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.tar.bz2 gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.tar.lz gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.tar.xz gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.tar.zst gsoc2013-evolution-d53b9af629fcf4b77417edb0e4207fb1e2f28e0f.zip |
Updated to reflect changes to the mail-config API. (create_msg_composer):
2001-01-07 Jeffrey Stedfast <fejj@helixcode.com>
* mail-callbacks.c (check_send_configuration): Updated to reflect
changes to the mail-config API.
(create_msg_composer): Same.
(forward_get_composer): Same.
(send_queued_mail): Same.
(composer_send_cb): Same.
* mail-account-editor.c: Updated to build cleanly. *
mail-config-druid.c: Same. * mail-accounts.c: Same.
* folder-browser-factory.c (control_activate): Updated for API
changes in mail-config.
* folder-browser.c (done_message_selected): Updated for API
changed in mail-config.
(folder_browser_gui_init): Same.
(got_folder): Same.
* component-factory.c (owner_set_cb): After using the sources
list, free it as it is no longer a const GSList as with the older
mail-config code.
* mail-config.c: Totally rewritten.
svn path=/trunk/; revision=7294
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 26 | ||||
-rw-r--r-- | mail/Makefile.am | 8 | ||||
-rw-r--r-- | mail/component-factory.c | 15 | ||||
-rw-r--r-- | mail/folder-browser-factory.c | 4 | ||||
-rw-r--r-- | mail/folder-browser.c | 6 | ||||
-rw-r--r-- | mail/mail-account-editor.c | 44 | ||||
-rw-r--r-- | mail/mail-accounts.c | 25 | ||||
-rw-r--r-- | mail/mail-accounts.h | 12 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 79 | ||||
-rw-r--r-- | mail/mail-config-druid.h | 8 | ||||
-rw-r--r-- | mail/mail-config.c | 583 | ||||
-rw-r--r-- | mail/mail-config.h | 119 |
12 files changed, 560 insertions, 369 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 983e87cc52..c2a2500560 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,31 @@ 2001-01-07 Jeffrey Stedfast <fejj@helixcode.com> + * mail-callbacks.c (check_send_configuration): Updated to reflect + changes to the mail-config API. + (create_msg_composer): Same. + (forward_get_composer): Same. + (send_queued_mail): Same. + (composer_send_cb): Same. + + * mail-account-editor.c: Updated to build cleanly. * + mail-config-druid.c: Same. * mail-accounts.c: Same. + + * folder-browser-factory.c (control_activate): Updated for API + changes in mail-config. + + * folder-browser.c (done_message_selected): Updated for API + changed in mail-config. + (folder_browser_gui_init): Same. + (got_folder): Same. + + * component-factory.c (owner_set_cb): After using the sources + list, free it as it is no longer a const GSList as with the older + mail-config code. + + * mail-config.c: Totally rewritten. + +2001-01-07 Jeffrey Stedfast <fejj@helixcode.com> + * mail-accounts.c (mail_edit): Implemented. * mail-account-editor.c (apply_clicked): Implemented. diff --git a/mail/Makefile.am b/mail/Makefile.am index 559f6fcae4..e981d817cf 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -50,14 +50,18 @@ evolution_mail_SOURCES = \ folder-browser.h \ folder-browser-factory.c \ folder-browser-factory.h \ + mail-accounts.c \ + mail-accounts.h \ + mail-account-editor.c \ + mail-account-editor.h \ mail-autofilter.c \ mail-autofilter.h \ mail-callbacks.c \ mail-callbacks.h \ mail-config.c \ mail-config.h \ - mail-config-gui.c \ - mail-config-gui.h \ + mail-config-druid.c \ + mail-config-druid.h \ mail-crypto.c \ mail-crypto.h \ mail-display.c \ diff --git a/mail/component-factory.c b/mail/component-factory.c index f89a9dbc80..d280388e58 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -171,12 +171,12 @@ owner_set_cb (EvolutionShellComponent *shell_component, const char *evolution_homedir, gpointer user_data) { - GSList *sources; GNOME_Evolution_Shell corba_shell; + GSList *sources; int i; g_print ("evolution-mail: Yeeeh! We have an owner!\n"); /* FIXME */ - + evolution_dir = g_strdup (evolution_homedir); mail_session_init (); mail_config_init (); @@ -189,15 +189,18 @@ owner_set_cb (EvolutionShellComponent *shell_component, sources = mail_config_get_sources (); mail_load_storages (corba_shell, sources); - sources = mail_config_get_news (); + /* only this one gets free'd because it's created on-the-fly */ + g_slist_free (sources); + + sources = (GSList *) mail_config_get_news (); mail_load_storages (corba_shell, sources); mail_local_storage_startup (shell_client, evolution_dir); - for (i=0;i<sizeof(standard_folders)/sizeof(standard_folders[0]);i++) { + for (i = 0; i < sizeof (standard_folders) / sizeof (standard_folders[0]); i++) { char *uri = g_strdup_printf ("file://%s/local/%s", evolution_dir, standard_folders[i].name); - mail_msg_wait(mail_get_folder(uri, got_folder, standard_folders[i].folder)); - g_free(uri); + mail_msg_wait (mail_get_folder (uri, got_folder, standard_folders[i].folder)); + g_free (uri); } mail_session_enable_interaction (TRUE); diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c index dba7207e81..5deaacadcc 100644 --- a/mail/folder-browser-factory.c +++ b/mail/folder-browser-factory.c @@ -155,7 +155,7 @@ control_activate (BonoboControl *control, uic, EVOLUTION_DATADIR, "evolution-mail.xml", "evolution-mail"); - if (mail_config_thread_list ()) + if (mail_config_get_thread_list ()) bonobo_ui_component_set_prop ( uic, "/commands/ViewThreaded", "state", "1", NULL); else @@ -166,7 +166,7 @@ control_activate (BonoboControl *control, uic, "ViewThreaded", folder_browser_toggle_threads, folder_browser); - if (mail_config_view_source ()) + if (mail_config_get_view_source ()) bonobo_ui_component_set_prop (uic, "/commands/ViewSource", "state", "1", NULL); else diff --git a/mail/folder-browser.c b/mail/folder-browser.c index 16d5c964a0..0fae4cd85d 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -175,7 +175,7 @@ got_folder(char *uri, CamelFolder *folder, void *data) camel_folder_has_search_capability (folder)); gtk_widget_set_sensitive (GTK_WIDGET (fb->search->option), camel_folder_has_search_capability (folder)); - message_list_set_threaded(fb->message_list, mail_config_thread_list()); + message_list_set_threaded(fb->message_list, mail_config_get_thread_list()); message_list_set_folder(fb->message_list, folder); done: gtk_object_unref((GtkObject *)fb); @@ -927,7 +927,7 @@ folder_browser_gui_init (FolderBrowser *fb) GTK_SIGNAL_FUNC (fb_resize_cb), NULL); e_paned_add2 (E_PANED (fb->vpaned), GTK_WIDGET (fb->mail_display)); - e_paned_set_position (E_PANED (fb->vpaned), mail_config_paned_size ()); + e_paned_set_position (E_PANED (fb->vpaned), mail_config_get_paned_size ()); gtk_widget_show (GTK_WIDGET (fb->mail_display)); gtk_widget_show (GTK_WIDGET (fb)); } @@ -952,7 +952,7 @@ do_mark_seen (gpointer data) static void done_message_selected(CamelFolder *folder, char *uid, CamelMimeMessage *msg, void *data) { FolderBrowser *fb = data; - int timeout = mail_config_mark_as_seen_timeout (); + int timeout = mail_config_get_mark_as_seen_timeout (); if (folder != fb->folder) return; diff --git a/mail/mail-account-editor.c b/mail/mail-account-editor.c index ec36a8fcab..1efbfec9d0 100644 --- a/mail/mail-account-editor.c +++ b/mail/mail-account-editor.c @@ -26,6 +26,7 @@ #include <string.h> #include <camel/camel-url.h> +extern CamelSession *session; static void mail_account_editor_class_init (MailAccountEditorClass *class); static void mail_account_editor_init (MailAccountEditor *editor); @@ -89,12 +90,12 @@ static void apply_clicked (GtkWidget *widget, gpointer data) { MailAccountEditor *editor = data; - const MailConfigAccount *account; + MailConfigAccount *account; char *host, *pport; CamelURL *url; int port; - account = editor->account; + account = (MailConfigAccount *) editor->account; /* account name */ g_free (account->name); @@ -139,13 +140,13 @@ apply_clicked (GtkWidget *widget, gpointer data) url->host = host; url->port = port; - g_free (account->source->url); - account->source->url = camel_url_to_string (url); - camel_url_free (url); - account->source->save_passwd = GTK_TOGGLE_BUTTON (editor->save_passwd)->active; account->source->keep_on_server = GTK_TOGGLE_BUTTON (editor->keep_on_server)->active; + g_free (account->source->url); + account->source->url = camel_url_to_string (url, account->source->save_passwd); + camel_url_free (url); + /* transport */ url = camel_url_new (account->transport->url, NULL); @@ -164,7 +165,7 @@ apply_clicked (GtkWidget *widget, gpointer data) url->port = port; g_free (account->transport->url); - account->transport->url = camel_url_to_string (url); + account->transport->url = camel_url_to_string (url, FALSE); camel_url_free (url); } @@ -251,7 +252,6 @@ transport_auth_type_changed (GtkWidget *widget, gpointer user_data) { MailAccountEditor *editor = user_data; CamelServiceAuthType *authtype; - gboolean sensitive; authtype = gtk_object_get_data (GTK_OBJECT (widget), "authtype"); @@ -323,16 +323,16 @@ transport_type_changed (GtkWidget *widget, gpointer user_data) if (provider->url_flags & CAMEL_URL_ALLOW_AUTH) { CamelURL *url; - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_auth_type), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_auth), TRUE); /* regen the auth list */ url = g_new0 (CamelURL, 1); url->protocol = g_strdup (provider->protocol); url->host = g_strdup (gtk_entry_get_text (editor->transport_host)); - transport_contstruct_authmenu (editor, url); + transport_construct_authmenu (editor, url); camel_url_free (url); } else { - gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_auth_type), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (editor->transport_auth), FALSE); } } @@ -384,19 +384,21 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) GtkWidget *notebook, *entry; CamelURL *url; - gui = glade_xml_new (EVOLUTION_DATA_DIR "/mail-config-druid.glade", "mail-account-editor"); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config-druid.glade", "mail-account-editor"); editor->gui = gui; /* get our toplevel widget */ notebook = glade_xml_get_widget (gui, "notebook"); /* reparent */ - gtk_widget_reparent (widget, GTK_WIDGET (editor)); + gtk_widget_reparent (notebook, GTK_WIDGET (editor)); /* give our dialog an OK button and title */ - gnome_dialog_construct (GNOME_DIALOG (editor), _("Evolution Account Editor"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_APPLY, - GNOME_STOCK_BUTTON_CANCEL); + gtk_window_set_title (GTK_WINDOW (editor), _("Evolution Account Editor")); + gnome_dialog_append_buttons (GNOME_DIALOG (editor), + GNOME_STOCK_BUTTON_OK, + GNOME_STOCK_BUTTON_APPLY, + GNOME_STOCK_BUTTON_CANCEL); gnome_dialog_button_connect (GNOME_DIALOG (editor), 0 /* OK */, GTK_SIGNAL_FUNC (ok_clicked), @@ -432,7 +434,7 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) if (url->port) { char port[10]; - g_snprintf (port, 9, ":%d", port); + g_snprintf (port, 9, ":%d", url->port); gtk_entry_append_text (editor->source_host, port); } editor->source_user = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourceUser")); @@ -440,7 +442,7 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) editor->source_passwd = GTK_ENTRY (glade_xml_get_widget (gui, "txtSourcePasswd")); gtk_entry_set_text (editor->source_passwd, url->passwd); editor->save_passwd = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkSavePasswd")); - gtk_check_button_set_active (GTK_TOGGLE_BUTTON (editor->save_passwd), account->source->save_passwd); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->save_passwd), account->source->save_passwd); editor->source_auth = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuSourceAuth")); editor->source_ssl = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkSourceSSL")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->source_ssl), account->source->use_ssl); @@ -452,17 +454,15 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) /* Transport */ url = camel_url_new (account->transport->url, NULL); editor->transport_type = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuTransportType")); - gtk_entry_set_text (editor->transport_type, url->protocol); editor->transport_host = GTK_ENTRY (glade_xml_get_widget (gui, "txtTransportHost")); gtk_entry_set_text (editor->transport_host, url->host); if (url->port) { char port[10]; - g_snprintf (port, 9, ":%d", port); + g_snprintf (port, 9, ":%d", url->port); gtk_entry_append_text (editor->transport_host, port); } editor->transport_auth = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuTransportAuth")); - transport_auth_init (editor); editor->transport_ssl = GTK_CHECK_BUTTON (glade_xml_get_widget (gui, "chkTransportSSL")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->transport_ssl), account->transport->use_ssl); transport_type_init (editor, url); @@ -474,7 +474,7 @@ construct (MailAccountEditor *editor, const MailConfigAccount *account) MailAccountEditor * mail_account_editor_new (const MailConfigAccount *account) { - MailAccountsDialog *new; + MailAccountEditor *new; new = (MailAccountEditor *) gtk_type_new (mail_account_editor_get_type ()); construct (new, account); diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index 396a573e1a..ed10636493 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -20,7 +20,12 @@ * */ +#include "config.h" + +#include "mail-accounts.h" #include "mail-config.h" +#include "mail-config-druid.h" +#include "mail-account-editor.h" #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -87,7 +92,7 @@ static void load_accounts (MailAccountsDialog *dialog) { const MailConfigAccount *account; - const GList *node = dialog->accounts; + const GSList *node = dialog->accounts; int i = 0; gtk_clist_freeze (dialog->mail_accounts); @@ -103,7 +108,7 @@ load_accounts (MailAccountsDialog *dialog) url = camel_url_new (account->source->url, NULL); text[0] = g_strdup (account->name); text[1] = g_strdup_printf ("%s%s", url->protocol, - account->default ? " (default)" : ""); + account->default_account ? " (default)" : ""); camel_url_free (url); gtk_clist_append (dialog->mail_accounts, text); @@ -111,7 +116,7 @@ load_accounts (MailAccountsDialog *dialog) g_free (text[1]); /* set the account on the row */ - gtk_clist_set_row_data (dialog->mail_accounts, i, account); + gtk_clist_set_row_data (dialog->mail_accounts, i, (gpointer) account); node = node->next; i++; @@ -167,7 +172,7 @@ mail_add (GtkButton *button, gpointer data) MailConfigDruid *druid; druid = mail_config_druid_new (); - gtk_signal_connect (GTK_OBJECT (druid), "destroy" + gtk_signal_connect (GTK_OBJECT (druid), "destroy", GTK_SIGNAL_FUNC (mail_add_finished), dialog); gtk_widget_show (GTK_WIDGET (druid)); @@ -184,11 +189,11 @@ mail_edit (GtkButton *button, gpointer data) { MailAccountsDialog *dialog = data; - if (dialog->accounts->row >= 0) { + if (dialog->accounts_row >= 0) { const MailConfigAccount *account; MailAccountEditor *editor; - account = gtk_clist_get_row_data (dialog->accounts, dialog->accounts_row); + account = gtk_clist_get_row_data (dialog->mail_accounts, dialog->accounts_row); editor = mail_account_editor_new (account); gtk_signal_connect (GTK_OBJECT (editor), "destroy", GTK_SIGNAL_FUNC (mail_editor_destroyed), @@ -211,7 +216,7 @@ mail_delete (GtkButton *button, gpointer data) account_destroy (account); gtk_clist_remove (dialog->mail_accounts, dialog->accounts_row); - len = g_list_length (dialog->accounts); + len = g_slist_length ((GSList *) dialog->accounts); if (len > 0) { row = dialog->accounts_row; row = row >= len ? len - 1 : row; @@ -295,7 +300,7 @@ news_delete (GtkButton *button, gpointer data) service_destroy (server); gtk_clist_remove (dialog->news_accounts, dialog->news_row); - len = g_list_length (dialog->news); + len = g_slist_length ((GSList *) dialog->news); if (len > 0) { row = dialog->news_row; row = row >= len ? len - 1 : row; @@ -314,14 +319,14 @@ construct (MailAccountsDialog *dialog) GladeXML *gui; GtkWidget *notebook; - gui = glade_xml_new (EVOLUTION_DATA_DIR "/mail-config-druid.glade", "mail-accounts-dialog"); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config-druid.glade", "mail-accounts-dialog"); dialog->gui = gui; /* get our toplevel widget */ notebook = glade_xml_get_widget (gui, "notebook"); /* reparent */ - gtk_widget_reparent (widget, GTK_WIDGET (dialog)); + gtk_widget_reparent (notebook, GTK_WIDGET (dialog)); /* give our dialog an OK button and title */ gnome_dialog_construct (GNOME_DIALOG (dialog), _("Evolution Accounts"), diff --git a/mail/mail-accounts.h b/mail/mail-accounts.h index 9de7ec0f98..b87d77e7f1 100644 --- a/mail/mail-accounts.h +++ b/mail/mail-accounts.h @@ -43,15 +43,19 @@ struct _MailAccountsDialog { GladeXML *gui; - const GList *accounts; - GtkClist *mail_accounts; + const GSList *accounts; + gint accounts_row; + + GtkCList *mail_accounts; GtkButton *mail_add; GtkButton *mail_edit; GtkButton *mail_delete; GtkButton *mail_default; - const GList *news; - GtkClist *news_accounts; + const GSList *news; + gint news_row; + + GtkCList *news_accounts; GtkButton *news_add; GtkButton *news_edit; GtkButton *news_delete; diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 9c7cd1e2b8..d58e208320 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -98,17 +98,18 @@ check_configured (FolderBrowser *fb) static gboolean check_send_configuration (FolderBrowser *fb) { - MailConfigService *xport = NULL; + const MailConfigAccount *account; /* Check general */ - if (!check_configured (fb)) { return FALSE; } - /* Check for an identity */ + /* Get the default account */ + account = mail_config_get_default_account (); - if (!mail_config_get_default_identity ()) { + /* Check for an identity */ + if (!account->id) { GtkWidget *message; message = gnome_warning_dialog_parented (_("You need to configure an identity\n" @@ -120,9 +121,7 @@ check_send_configuration (FolderBrowser *fb) } /* Check for a transport */ - - xport = mail_config_get_transport (); - if (!xport || !xport->url) { + if (!account->transport || !account->transport->url) { GtkWidget *message; message = gnome_warning_dialog_parented (_("You need to configure a mail transport\n" @@ -199,14 +198,14 @@ void send_queued_mail (GtkWidget *widget, gpointer user_data) { extern CamelFolder *outbox_folder; - MailConfigService *transport; + const MailConfigAccount *account; if (!mail_config_is_configured ()) { return; } - transport = mail_config_get_transport (); - if (!transport) { + account = mail_config_get_default_account (); + if (!account->transport) { GtkWidget *win = gtk_widget_get_ancestor (GTK_WIDGET (user_data), GTK_TYPE_WINDOW); @@ -224,7 +223,7 @@ send_queued_mail (GtkWidget *widget, gpointer user_data) return; } - mail_do_send_queue (outbox_folder, transport->url); + mail_do_send_queue (outbox_folder, account->transport->url); } void @@ -291,7 +290,7 @@ composer_sent_cb(char *uri, CamelMimeMessage *message, gboolean sent, void *data void composer_send_cb (EMsgComposer *composer, gpointer data) { - MailConfigService *xport = NULL; + const MailConfigAccount *account = NULL; CamelMimeMessage *message; const CamelInternetAddress *iaddr; const char *subject; @@ -299,7 +298,7 @@ composer_send_cb (EMsgComposer *composer, gpointer data) struct _send_data *send; /* Config info */ - xport = mail_config_get_transport (); + account = mail_config_get_default_account (); /* Get the message */ message = e_msg_composer_get_message (composer); @@ -328,13 +327,13 @@ composer_send_cb (EMsgComposer *composer, gpointer data) return; } } - + send = g_malloc(sizeof(*send)); send->psd = psd; send->composer = composer; gtk_object_ref((GtkObject *)composer); gtk_widget_hide((GtkWidget *)composer); - mail_send_mail(xport->url, message, composer_sent_cb, send); + mail_send_mail (account->transport->url, message, composer_sent_cb, send); } void @@ -374,25 +373,25 @@ composer_postpone_cb (EMsgComposer *composer, gpointer data) static GtkWidget * create_msg_composer (const char *url) { - MailConfigIdentity *id; - gboolean send_html; - gchar *sig_file = NULL; - EMsgComposer *composer; - - id = mail_config_get_default_identity (); - send_html = mail_config_send_html (); - - if (id) - sig_file = id->sig; - - if (url != NULL) { - composer = e_msg_composer_new_from_url (url); - if (composer) - e_msg_composer_set_send_html (composer, send_html); - } else - composer = e_msg_composer_new_with_sig_file (sig_file, send_html); - - return (GtkWidget *)composer; + const MailConfigAccount *account; + gboolean send_html; + gchar *sig_file = NULL; + EMsgComposer *composer; + + account = mail_config_get_default_account (); + send_html = mail_config_get_send_html (); + + if (account->id) + sig_file = account->id->signature; + + if (url != NULL) { + composer = e_msg_composer_new_from_url (url); + if (composer) + e_msg_composer_set_send_html (composer, send_html); + } else + composer = e_msg_composer_new_with_sig_file (sig_file, send_html); + + return (GtkWidget *)composer; } void @@ -499,13 +498,15 @@ enumerate_msg (MessageList *ml, const char *uid, gpointer data) } -static EMsgComposer *forward_get_composer(const char *subject) +static EMsgComposer * +forward_get_composer (const char *subject) { + const MailConfigAccount *account; EMsgComposer *composer; - MailConfigIdentity *id; - - id = mail_config_get_default_identity (); - composer = e_msg_composer_new_with_sig_file(id?id->sig:NULL, mail_config_send_html()); + + account = mail_config_get_default_account (); + composer = e_msg_composer_new_with_sig_file (account && account->id ? account->id->signature : NULL, + mail_config_get_send_html ()); if (composer) { gtk_signal_connect (GTK_OBJECT (composer), "send", GTK_SIGNAL_FUNC (composer_send_cb), NULL); diff --git a/mail/mail-config-druid.h b/mail/mail-config-druid.h index 8301d45c4b..29a17736b9 100644 --- a/mail/mail-config-druid.h +++ b/mail/mail-config-druid.h @@ -50,7 +50,7 @@ struct _MailConfigDruid { /* account management */ GtkWidget *account_text; GtkEntry *account_name; - GtkCheckBox *default_account; + GtkCheckButton *default_account; /* identity */ GtkWidget *identity_text; @@ -66,19 +66,19 @@ struct _MailConfigDruid { GtkEntry *incoming_hostname; GtkEntry *incoming_username; GtkEntry *incoming_path; - GtkCheckBox *incoming_keep_mail; + GtkCheckButton *incoming_keep_mail; /* authentication */ GtkWidget *auth_text; GtkOptionMenu *auth_type; GtkEntry *password; - GtkCheckBox *save_password; + GtkCheckButton *save_password; /* outgoing mail */ GtkWidget *outgoing_text; GtkOptionMenu *outgoing_type; GtkEntry *outgoing_hostname; - GtkCheckBox *outgoing_requires_auth; + GtkCheckButton *outgoing_requires_auth; const CamelProvider *source_provider; const CamelProvider *transport_provider; diff --git a/mail/mail-config.c b/mail/mail-config.c index a9dfe99928..5121683bc6 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -1,28 +1,23 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-config.c: Mail configuration dialogs/wizard. */ - -/* - * Authors: - * Dan Winship <danw@helixcode.com> - * Jeffrey Stedfast <fejj@helixcode.com> - * JP Rosevear <jpr@helixcode.com> +/* + * Authors: Jeffrey Stedfast <fejj@helixcode.com> + * + * Copyright 2001 Helix Code, Inc. (www.helixcode.com) * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA */ #include <config.h> @@ -37,20 +32,18 @@ #include "e-util/e-html-utils.h" #include "mail.h" #include "mail-config.h" +#include "mail-ops.h" -typedef struct -{ +typedef struct { gboolean configured; - GSList *ids; - GSList *sources; - GSList *news; - MailConfigService *transport; - gboolean thread_list; gboolean view_source; gint paned_size; gboolean send_html; gint seen_timeout; + + GSList *accounts; + GSList *news; } MailConfig; static const char GCONFPATH[] = "/apps/Evolution/Mail"; @@ -59,21 +52,22 @@ static MailConfig *config = NULL; /* Prototypes */ static void config_read (void); -/* Identity struct */ +/* Identity */ MailConfigIdentity * -identity_copy (MailConfigIdentity *id) +identity_copy (const MailConfigIdentity *id) { - MailConfigIdentity *newid; + MailConfigIdentity *new; - g_return_val_if_fail (id, NULL); + g_return_val_if_fail (id != NULL, NULL); - newid = g_new0 (MailConfigIdentity, 1); - newid->name = g_strdup (id->name); - newid->address = g_strdup (id->address); - newid->org = g_strdup (id->org); - newid->sig = g_strdup (id->sig); + new = g_new0 (MailConfigIdentity, 1); + new->name = g_strdup (id->name); + new->address = g_strdup (id->address); + new->reply_to = g_strdup (id->reply_to); + new->organization = g_strdup (id->organization); + new->signature = g_strdup (id->signature); - return newid; + return new; } void @@ -84,32 +78,28 @@ identity_destroy (MailConfigIdentity *id) g_free (id->name); g_free (id->address); - g_free (id->org); - g_free (id->sig); + g_free (id->reply_to); + g_free (id->organization); + g_free (id->signature); g_free (id); } -void -identity_destroy_each (gpointer item, gpointer data) -{ - identity_destroy ((MailConfigIdentity *)item); -} - -/* Service struct */ +/* Service */ MailConfigService * -service_copy (MailConfigService *source) +service_copy (const MailConfigService *source) { - MailConfigService *newsource; + MailConfigService *new; - g_return_val_if_fail (source, NULL); + g_return_val_if_fail (source != NULL, NULL); - newsource = g_new0 (MailConfigService, 1); - newsource->url = g_strdup (source->url); - newsource->keep_on_server = source->keep_on_server; - newsource->remember_password = source->remember_password; + new = g_new0 (MailConfigService, 1); + new->url = g_strdup (source->url); + new->keep_on_server = source->keep_on_server; + new->save_passwd = source->save_passwd; + new->use_ssl = source->use_ssl; - return newsource; + return new; } void @@ -117,7 +107,7 @@ service_destroy (MailConfigService *source) { if (!source) return; - + g_free (source->url); g_free (source); @@ -129,6 +119,46 @@ service_destroy_each (gpointer item, gpointer data) service_destroy ((MailConfigService *)item); } +/* Account */ +MailConfigAccount * +account_copy (const MailConfigAccount *account) +{ + MailConfigAccount *new; + + g_return_val_if_fail (account != NULL, NULL); + + new = g_new0 (MailConfigAccount, 1); + new->name = g_strdup (account->name); + new->default = source->default; + + new->id = identity_copy (account->id); + new->source = service_copy (account->source); + new->transport = service_copy (account->transport); + + return new; +} + +void +account_destroy (MailConfigAccount *account) +{ + if (!account) + return; + + g_free (account->name); + + identity_destroy (account->id); + service_destroy (account->source); + service_destroy (account->transport); + + g_free (account); +} + +void +account_destroy_each (gpointer item, gpointer data) +{ + account_destroy ((MailConfigAccount *)item); +} + /* Config struct routines */ void mail_config_init (void) @@ -137,11 +167,6 @@ mail_config_init (void) return; config = g_new0 (MailConfig, 1); - - config->ids = NULL; - config->sources = NULL; - config->transport = NULL; - config_read (); } @@ -151,26 +176,20 @@ mail_config_clear (void) if (!config) return; - if (config->ids) { - g_slist_foreach (config->ids, identity_destroy_each, NULL); - g_slist_free (config->ids); - config->ids = NULL; + if (config->accounts) { + g_slist_foreach (config->accounts, account_destroy_each, NULL); + g_slist_free (config->accounts); + config->accounts = NULL; } - if (config->sources) { - g_slist_foreach (config->sources, service_destroy_each, NULL); - g_slist_free (config->sources); - config->sources = NULL; - } - - service_destroy (config->transport); - config->transport = NULL; - if (config->news) { - g_slist_foreach (config->news, service_destroy_each, NULL); - g_slist_free (config->news); + g_list_foreach (config->news, service_destroy_each, NULL); + g_list_free (config->news); config->news = NULL; } + + /* overkill? */ + memset (config, 0, sizeof (MailConfig)); } static void @@ -178,66 +197,79 @@ config_read (void) { gchar *str; gint len, i; + gboolean have_default = FALSE; mail_config_clear (); - + /* Configured */ str = g_strdup_printf ("=%s/config/General=/General/configured", evolution_dir); config->configured = gnome_config_get_bool (str); g_free (str); - /* Identities */ - str = g_strdup_printf ("=%s/config/Mail=/Identities/", evolution_dir); + /* Accounts */ + str = g_strdup_printf ("=%s/config/Mail=/Accounts/", evolution_dir); gnome_config_push_prefix (str); g_free (str); - + len = gnome_config_get_int ("num"); for (i = 0; i < len; i++) { + MailConfigAccount *account; MailConfigIdentity *id; + MailConfigService *source; + MailConfigService *transport; gchar *path; - id = g_new0 (MailConfigIdentity, 1); - - path = g_strdup_printf ("name_%d", i); + account = g_new0 (MailConfigAccount, 1); + path = g_strdup_printf ("account_name_%d", i); + account->name = gnome_config_get_string (path); + g_free (path); + path = g_strdup_printf ("account_default_%d", i); + account->default = gnome_config_get_bool (path) && !have_default; + if (account->default) + have_default = TRUE; + g_free (path); + + /* get the identity info */ + id = g_new0 (MailConfigIdentity, 1); + path = g_strdup_printf ("identity_name_%d", i); id->name = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("address_%d", i); + path = g_strdup_printf ("identity_replyto_%d", i); + id->reply_to = gnome_config_get_string (path); + g_free (path); + path = g_strdup_printf ("identity_address_%d", i); id->address = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("org_%d", i); + path = g_strdup_printf ("identity_organization_%d", i); id->org = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("sig_%d", i); + path = g_strdup_printf ("identity_signature_%d", i); id->sig = gnome_config_get_string (path); g_free (path); - - config->ids = g_slist_append (config->ids, id); - } - gnome_config_pop_prefix (); - - /* Sources */ - str = g_strdup_printf ("=%s/config/Mail=/Sources/", evolution_dir); - gnome_config_push_prefix (str); - g_free (str); - - len = gnome_config_get_int ("num"); - for (i = 0; i < len; i++) { - MailConfigService *s; - gchar *path; - - s = g_new0 (MailConfigService, 1); - path = g_strdup_printf ("url_%d", i); - s->url = gnome_config_get_string (path); + /* get the source */ + source = g_new0 (MailConfigService, 1); + path = g_strdup_printf ("source_url_%d", i); + source->url = gnome_config_get_string (path); + g_free (path); + path = g_strdup_printf ("source_keep_on_server_%d", i); + source->keep_on_server = gnome_config_get_bool (path); g_free (path); - path = g_strdup_printf ("keep_on_server_%d", i); - s->keep_on_server = gnome_config_get_bool (path); + path = g_strdup_printf ("source_save_passwd_%d", i); + source->save_passwd = gnome_config_get_bool (path); g_free (path); - path = g_strdup_printf ("remember_password_%d", i); - s->remember_password = gnome_config_get_bool (path); + + /* get the transport */ + transport = g_new0 (MailConfigService, 1); + path = g_strdup_printf ("transport_url_%d", i); + transport->url = gnome_config_get_string (path); g_free (path); - config->sources = g_slist_append (config->sources, s); + account->id = id; + account->source = source; + account->transport = transport; + + config->accounts = g_slist_append (config->accounts, account); } gnome_config_pop_prefix (); @@ -245,53 +277,46 @@ config_read (void) str = g_strdup_printf ("=%s/config/News=/Sources/", evolution_dir); gnome_config_push_prefix (str); g_free (str); - + len = gnome_config_get_int ("num"); for (i = 0; i < len; i++) { MailConfigService *n; gchar *path; n = g_new0 (MailConfigService, 1); - + path = g_strdup_printf ("url_%d", i); n->url = gnome_config_get_string (path); g_free (path); - + config->news = g_slist_append (config->news, n); } gnome_config_pop_prefix (); - /* Transport */ - config->transport = g_new0 (MailConfigService, 1); - str = g_strdup_printf ("=%s/config/Mail=/Transport/url", - evolution_dir); - config->transport->url = gnome_config_get_string (str); - g_free (str); - /* Format */ str = g_strdup_printf ("=%s/config/Mail=/Format/send_html", evolution_dir); config->send_html = gnome_config_get_bool (str); g_free (str); - + /* Mark as seen timeout */ str = g_strdup_printf ("=%s/config/Mail=/Display/seen_timeout=1500", evolution_dir); config->seen_timeout = gnome_config_get_int (str); g_free (str); - + /* Show Messages Threaded */ str = g_strdup_printf ("=%s/config/Mail=/Display/thread_list", evolution_dir); config->thread_list = gnome_config_get_bool (str); g_free (str); - + /* Size of vpaned in mail view */ str = g_strdup_printf ("=%s/config/Mail=/Display/paned_size=200", evolution_dir); config->paned_size = gnome_config_get_int (str); g_free (str); - + gnome_config_sync (); } @@ -300,7 +325,7 @@ mail_config_write (void) { gchar *str; gint len, i; - + /* Configured switch */ str = g_strdup_printf ("=%s/config/General=/General/configured", evolution_dir); @@ -308,96 +333,90 @@ mail_config_write (void) gnome_config_set_bool (str, config->configured); g_free (str); - /* Identities */ - str = g_strdup_printf ("=%s/config/Mail=/Identities/", evolution_dir); + /* Accounts */ + str = g_strdup_printf ("=%s/config/Mail=/Accounts/", evolution_dir); gnome_config_push_prefix (str); g_free (str); - - len = g_slist_length (config->ids); + + len = g_slist_length (config->accounts); gnome_config_set_int ("num", len); for (i = 0; i < len; i++) { - MailConfigIdentity *id; + MailConfigAccount *account; gchar *path; - id = (MailConfigIdentity *)g_slist_nth_data (config->ids, i); + account = g_slist_nth_data (config->accounts, i); - path = g_strdup_printf ("name_%d", i); - gnome_config_set_string (path, id->name); + /* account info */ + path = g_strdup_printf ("account_name_%d", i); + gnome_config_set_string (path, account->name); g_free (path); - path = g_strdup_printf ("address_%d", i); - gnome_config_set_string (path, id->address); + path = g_strdup_printf ("account_default_%d", i); + gnome_config_set_bool (path, account->default); g_free (path); - path = g_strdup_printf ("org_%d", i); - gnome_config_set_string (path, id->org); + + /* identity info */ + path = g_strdup_printf ("identity_name_%d", i); + gnome_config_set_string (path, account->id->name); g_free (path); - path = g_strdup_printf ("sig_%d", i); - gnome_config_set_string (path, id->sig); + path = g_strdup_printf ("identity_address_%d", i); + gnome_config_set_string (path, account->id->address); + g_free (path); + path = g_strdup_printf ("identity_organization_%d", i); + gnome_config_set_string (path, account->id->organization); + g_free (path); + path = g_strdup_printf ("identity_signature_%d", i); + gnome_config_set_string (path, account->id->signature); g_free (path); - } - gnome_config_pop_prefix (); - - /* Sources */ - str = g_strdup_printf ("=%s/config/Mail=/Sources/", evolution_dir); - gnome_config_push_prefix (str); - g_free (str); - - len = g_slist_length (config->sources); - gnome_config_set_int ("num", len); - for (i=0; i<len; i++) { - MailConfigService *s; - gchar *path; - - s = (MailConfigService *)g_slist_nth_data (config->sources, i); - path = g_strdup_printf ("url_%d", i); - gnome_config_set_string (path, s->url); + /* source info */ + path = g_strdup_printf ("source_url_%d", i); + gnome_config_set_string (path, account->source->url); + g_free (path); + path = g_strdup_printf ("source_keep_on_server_%d", i); + gnome_config_set_bool (path, account->source->keep_on_server); g_free (path); - path = g_strdup_printf ("keep_on_server_%d", i); - gnome_config_set_bool (path, s->keep_on_server); + path = g_strdup_printf ("source_save_passwd_%d", i); + gnome_config_set_bool (path, account->source->save_passwd); g_free (path); - path = g_strdup_printf ("remember_password_%d", i); - gnome_config_set_bool (path, s->remember_password); + + /* transport info */ + path = g_strdup_printf ("transport_url_%d", i); + gnome_config_set_string (path, account->transport->url); g_free (path); } gnome_config_pop_prefix (); - + /* News */ str = g_strdup_printf ("=%s/config/News=/Sources/", evolution_dir); gnome_config_push_prefix (str); g_free (str); - + len = g_slist_length (config->news); gnome_config_set_int ("num", len); - for (i=0; i<len; i++) { + for (i = 0; i < len; i++) { MailConfigService *n; gchar *path; - n = (MailConfigService *)g_slist_nth_data (config->news, i); + n = g_slist_nth_data (config->news, i); path = g_strdup_printf ("url_%d", i); gnome_config_set_string (path, n->url); g_free (path); } gnome_config_pop_prefix (); - - /* Transport */ - str = g_strdup_printf ("=%s/config/Mail=/Transport/url", - evolution_dir); - gnome_config_set_string (str, config->transport->url); - g_free (str); /* Mark as seen timeout */ str = g_strdup_printf ("=%s/config/Mail=/Display/seen_timeout", evolution_dir); gnome_config_set_int (str, config->seen_timeout); g_free (str); - + /* Format */ str = g_strdup_printf ("=%s/config/Mail=/Format/send_html", evolution_dir); gnome_config_set_bool (str, config->send_html); g_free (str); - + gnome_config_sync (); } @@ -407,27 +426,27 @@ mail_config_write_on_exit (void) gchar *str; GSList *sources; MailConfigService *s; - + /* Show Messages Threaded */ str = g_strdup_printf ("=%s/config/Mail=/Display/thread_list", evolution_dir); gnome_config_set_bool (str, config->thread_list); g_free (str); - + /* Size of vpaned in mail view */ str = g_strdup_printf ("=%s/config/Mail=/Display/paned_size", evolution_dir); gnome_config_set_int (str, config->paned_size); g_free (str); - + /* Passwords */ gnome_config_private_clean_section ("/Evolution/Passwords"); for (sources = config->sources; sources; sources = sources->next) { s = sources->data; - if (s->remember_password) + if (s->save_passwd) mail_session_remember_password (s->url); } - + gnome_config_sync (); } @@ -439,23 +458,23 @@ mail_config_is_configured (void) } gboolean -mail_config_thread_list (void) +mail_config_get_thread_list (void) { return config->thread_list; } -gboolean -mail_config_view_source (void) -{ - return config->view_source; -} - void mail_config_set_thread_list (gboolean value) { config->thread_list = value; } +gboolean +mail_config_get_view_source (void) +{ + return config->view_source; +} + void mail_config_set_view_source (gboolean value) { @@ -463,7 +482,7 @@ mail_config_set_view_source (gboolean value) } gint -mail_config_paned_size (void) +mail_config_get_paned_size (void) { return config->paned_size; } @@ -475,7 +494,7 @@ mail_config_set_paned_size (gint value) } gboolean -mail_config_send_html (void) +mail_config_get_send_html (void) { return config->send_html; } @@ -487,7 +506,7 @@ mail_config_set_send_html (gboolean send_html) } gint -mail_config_mark_as_seen_timeout (void) +mail_config_get_mark_as_seen_timeout (void) { return config->seen_timeout; } @@ -498,68 +517,94 @@ mail_config_set_mark_as_seen_timeout (gint timeout) config->seen_timeout = timeout; } -MailConfigIdentity * -mail_config_get_default_identity (void) +const MailConfigAccount * +mail_config_get_default_account (void) { - if (!config->ids) + const MailConfigAccount *account; + GSList *l; + + if (!config->accounts) return NULL; - return (MailConfigIdentity *)config->ids->data; + /* find the default account */ + l = config->accounts; + while (l) { + account = l->data; + if (account->default_account) + return account; + l = l->next; + } + + /* non are marked as default so return the first one */ + return (MailConfigAccount *)config->accounts->data; } -GSList * -mail_config_get_identities (void) +const GSList * +mail_config_get_accounts (void) { - return config->ids; + return config->accounts; } void -mail_config_add_identity (MailConfigIdentity *id) -{ - MailConfigIdentity *new_id = identity_copy (id); - - config->ids = g_slist_append (config->ids, new_id); -} - -MailConfigService * -mail_config_get_default_source (void) +mail_config_add_accounts (MailConfigAccount *account) { - if (!config->sources) - return NULL; + if (account->default_account) { + /* Un-defaultify other accounts */ + GSList *node = accounts; + + while (node) { + MailConfigAccount *acnt = node->data; + + acnt->default_account = FALSE; + + node = node->next; + } + } - return (MailConfigService *)config->sources->data; -} - -GSList * -mail_config_get_sources (void) -{ - return config->sources; + config->accounts = g_slist_append (config->accounts, account); } void -mail_config_add_source (MailConfigService *source) +mail_config_set_default_account (const MailConfigAccount *account) { - MailConfigService *new_source = service_copy (source); + GSList *node = accounts; + + while (node) { + MailConfigAccount *acnt = node->data; + + acnt->default_account = FALSE; + + node = node->next; + } - config->sources = g_slist_append (config->sources, new_source); + account->default_account = TRUE; } -MailConfigService * -mail_config_get_transport (void) +const MailConfigIdentity * +mail_config_get_default_identity (void) { - return config->transport; + const MailConfigAccount *account; + + account = mail_config_get_default_account (); + if (account) + return account->id; + else + return NULL; } -void -mail_config_set_transport (MailConfigService *transport) +const MailConfigService * +mail_config_get_default_transport (void) { - if (config->transport) - service_destroy (config->transport); - - config->transport = transport; + const MailConfigAccount *account; + + account = mail_config_get_default_account (); + if (account) + return account->transport; + else + return NULL; } -MailConfigService * +const MailConfigService * mail_config_get_default_news (void) { if (!config->news) @@ -568,7 +613,7 @@ mail_config_get_default_news (void) return (MailConfigService *)config->news->data; } -GSList * +const GSList * mail_config_get_news (void) { return config->news; @@ -577,24 +622,102 @@ mail_config_get_news (void) void mail_config_add_news (MailConfigService *news) { - MailConfigService *new_news = service_copy (news); + config->news = g_slist_append (config->news, news); +} - config->news = g_slist_append (config->news, new_news); +GSList * +mail_config_get_sources (void) +{ + const GSList *accounts; + GSList *sources = NULL; + + accounts = mail_config_get_accounts (); + while (accounts) { + if (accounts->source) + sources = g_slist_append (sources, accounts->source); + + accounts = accounts->next; + } + + return sources; } char * -mail_config_folder_to_cachename(CamelFolder *folder, const char *prefix) +mail_config_folder_to_cachename (CamelFolder *folder, const char *prefix) { char *url, *filename; - url = camel_url_to_string(CAMEL_SERVICE(folder->parent_store)->url, FALSE); + url = camel_url_to_string (CAMEL_SERVICE (folder->parent_store)->url, FALSE); e_filename_make_safe (url); - filename = g_strdup_printf("%s/config/%s%s", evolution_dir, prefix, url); - g_free(url); + filename = g_strdup_printf ("%s/config/%s%s", evolution_dir, prefix, url); + g_free (url); + return filename; } +/* Async service-checking/authtype-lookup code. */ + +typedef struct { + char *url; + CamelProviderType type; + GList **authtypes; + gboolean success; +} check_service_input_t; +static char * +describe_check_service (gpointer in_data, gboolean gerund) +{ + if (gerund) + return g_strdup (_("Connecting to server")); + else + return g_strdup (_("Connect to server")); +} +static void +do_check_service (gpointer in_data, gpointer op_data, CamelException *ex) +{ + check_service_input_t *input = in_data; + CamelService *service; + + if (input->authtypes) { + service = camel_session_get_service ( + session, input->url, input->type, ex); + if (!service) + return; + *input->authtypes = camel_service_query_auth_types (service, ex); + } else { + service = camel_session_get_service_connected ( + session, input->url, input->type, ex); + } + if (service) + camel_object_unref (CAMEL_OBJECT (service)); + if (!camel_exception_is_set (ex)) + input->success = TRUE; +} + +static const mail_operation_spec op_check_service = { + describe_check_service, + 0, + NULL, + do_check_service, + NULL +}; + +gboolean +mail_config_check_service (CamelURL *url, CamelProviderType type, GList **authtypes) +{ + check_service_input_t input; + + input.url = camel_url_to_string (url, TRUE); + input.type = type; + input.authtypes = authtypes; + input.success = FALSE; + + mail_operation_queue (&op_check_service, &input, FALSE); + mail_operation_wait_for_finish (); + g_free (input.url); + + return input.success; +} diff --git a/mail/mail-config.h b/mail/mail-config.h index bbf7176acb..5c40b832f2 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -1,7 +1,8 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - /* - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) + * Authors: Jeffrey Stedfast <fejj@helixcode.com> + * + * Copyright 2001 Helix Code, Inc. (www.helixcode.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,41 +17,58 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * */ -#ifndef _MAIL_CONFIG_H -#define _MAIL_CONFIG_H - - +#ifndef MAIL_CONFIG_H +#define MAIL_CONFIG_H #include <glib.h> -#include <camel/camel-folder.h> +#include <camel/camel.h> -typedef struct -{ +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +typedef struct { gchar *name; gchar *address; - gchar *org; - gchar *sig; + gchar *reply_to; + gchar *organization; + gchar *signature; } MailConfigIdentity; -typedef struct -{ +typedef struct { gchar *url; gboolean keep_on_server; - gboolean remember_password; + gboolean save_passwd; + gboolean use_ssl; } MailConfigService; +typedef struct { + gchar *name; + gboolean default_account; + + MailConfigIdentity *id; + MailConfigService *source; + MailConfigService *transport; +} MailConfigAccount; + /* Identities */ -MailConfigIdentity *identity_copy (MailConfigIdentity *id); +MailConfigIdentity *identity_copy (const MailConfigIdentity *id); void identity_destroy (MailConfigIdentity *id); -void identity_destroy_each (gpointer item, gpointer data); /* Services */ -MailConfigService *service_copy (MailConfigService *source); +MailConfigService *service_copy (const MailConfigService *source); void service_destroy (MailConfigService *source); void service_destroy_each (gpointer item, gpointer data); +/* Accounts */ +MailConfigAccount *account_copy (const MailConfigAccount *account); +void account_destroy (MailConfigAccount *account); +void account_destroy_each (gpointer item, gpointer data); + /* Configuration */ void mail_config_init (void); void mail_config_clear (void); @@ -58,38 +76,45 @@ void mail_config_write (void); void mail_config_write_on_exit (void); /* General Accessor functions */ -gboolean mail_config_is_configured (void); -gboolean mail_config_thread_list (void); -gboolean mail_config_view_source (void); -gint mail_config_paned_size (void); -void mail_config_set_thread_list (gboolean value); -void mail_config_set_view_source (gboolean value); -void mail_config_set_paned_size (gint size); -gboolean mail_config_send_html (void); -void mail_config_set_send_html (gboolean send_html); -gint mail_config_mark_as_seen_timeout (void); -void mail_config_set_mark_as_seen_timeout (gint timeout); - -/* Identity Accessor functions */ -MailConfigIdentity *mail_config_get_default_identity (void); -void mail_config_add_identity (MailConfigIdentity *id); -GSList *mail_config_get_identities (void); - -/* Service Accessor functions */ -MailConfigService *mail_config_get_default_source (void); -GSList *mail_config_get_sources (void); -void mail_config_add_source (MailConfigService *source); - -MailConfigService *mail_config_get_transport (void); -void mail_config_set_transport (MailConfigService *transport); - -MailConfigService *mail_config_get_default_news (void); -GSList *mail_config_get_news (void); -void mail_config_add_news (MailConfigService *source); +gboolean mail_config_is_configured (void); + +gboolean mail_config_get_thread_list (void); +void mail_config_set_thread_list (gboolean value); + +gboolean mail_config_get_view_source (void); +void mail_config_set_view_source (gboolean value); + +gint mail_config_get_paned_size (void); +void mail_config_set_paned_size (gint size); + +gboolean mail_config_get_send_html (void); +void mail_config_set_send_html (gboolean send_html); + +gint mail_config_get_mark_as_seen_timeout (void); +void mail_config_set_mark_as_seen_timeout (gint timeout); + +const MailConfigAccount *mail_config_get_default_account (void); +const GSList *mail_config_get_accounts (void); +void mail_config_add_account (MailConfigAccount *account); +void mail_config_set_default_account (const MailConfigAccount *account); + +const MailConfigIdentity *mail_config_get_default_identity (void); +const MailConfigService *mail_config_get_default_transport (void); + +const MailConfigService *mail_config_get_default_news (void); +const GSList *mail_config_get_news (void); +void mail_config_add_news (MailConfigService *news); + +/* convenience functions to help ease the transition over to the new codebase */ +GSList *mail_config_get_sources (void); /* static utility functions */ -char *mail_config_folder_to_cachename(CamelFolder *folder, const char *prefix); +char *mail_config_folder_to_cachename (CamelFolder *folder, const char *prefix); -#endif +gboolean mail_config_check_service (CamelURL *url, CamelProviderType type, GList **authtypes); +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* MAIL_CONFIG_H */ |