diff options
-rw-r--r-- | mail/ChangeLog | 13 | ||||
-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-callbacks.c | 93 | ||||
-rw-r--r-- | mail/mail-config.c | 589 | ||||
-rw-r--r-- | mail/mail-config.h | 119 | ||||
-rw-r--r-- | mail/mail-display.c | 2 | ||||
-rw-r--r-- | mail/mail-format.c | 6 | ||||
-rw-r--r-- | mail/mail-tools.c | 2 |
11 files changed, 350 insertions, 507 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 581d25fe92..6e6a47261c 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,18 @@ 2001-01-08 Jeffrey Stedfast <fejj@helixcode.com> + * Makefile.am: + * component-factory.c: + * folder-browser-factory.c: + * folder-browser.c: + * mail-callbacks.c: + * mail-config.[c,h]: + * mail-display.c: + * mail-format.c: + * mail-tools.c: Reverted mail-config changes temporarily until + I get it working correctly. + +2001-01-08 Jeffrey Stedfast <fejj@helixcode.com> + * mail-config-druid.c: More lovely fixes... * mail-callbacks.c: Don't segfault if a default account doesn't diff --git a/mail/Makefile.am b/mail/Makefile.am index e981d817cf..559f6fcae4 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -50,18 +50,14 @@ 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-druid.c \ - mail-config-druid.h \ + mail-config-gui.c \ + mail-config-gui.h \ mail-crypto.c \ mail-crypto.h \ mail-display.c \ diff --git a/mail/component-factory.c b/mail/component-factory.c index d280388e58..f89a9dbc80 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) { - GNOME_Evolution_Shell corba_shell; GSList *sources; + GNOME_Evolution_Shell corba_shell; 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,18 +189,15 @@ owner_set_cb (EvolutionShellComponent *shell_component, sources = mail_config_get_sources (); mail_load_storages (corba_shell, sources); - /* only this one gets free'd because it's created on-the-fly */ - g_slist_free (sources); - - sources = (GSList *) mail_config_get_news (); + sources = 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 5deaacadcc..dba7207e81 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_get_thread_list ()) + if (mail_config_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_get_view_source ()) + if (mail_config_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 0fae4cd85d..16d5c964a0 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_get_thread_list()); + message_list_set_threaded(fb->message_list, mail_config_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_get_paned_size ()); + e_paned_set_position (E_PANED (fb->vpaned), mail_config_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_get_mark_as_seen_timeout (); + int timeout = mail_config_mark_as_seen_timeout (); if (folder != fb->folder) return; diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index ee9de6d195..9c7cd1e2b8 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -33,8 +33,6 @@ #include "mail.h" #include "mail-callbacks.h" #include "mail-config.h" -#include "mail-accounts.h" -#include "mail-config-druid.h" #include "mail-threads.h" #include "mail-tools.h" #include "mail-ops.h" @@ -67,8 +65,6 @@ struct post_send_data { static gboolean check_configured (FolderBrowser *fb) { - MailConfigDruid *druid; - if (mail_config_is_configured ()) return TRUE; @@ -87,9 +83,7 @@ check_configured (FolderBrowser *fb) switch (gnome_dialog_run_and_close (GNOME_DIALOG (dialog))) { case 0: - /* FIXME: should we block until mail-config is done? */ - druid = mail_config_druid_new (fb->shell); - gtk_widget_show (GTK_WIDGET (druid)); + mail_config_druid (fb->shell); break; case 1: default: @@ -104,18 +98,17 @@ check_configured (FolderBrowser *fb) static gboolean check_send_configuration (FolderBrowser *fb) { - const MailConfigAccount *account; + MailConfigService *xport = NULL; /* Check general */ + if (!check_configured (fb)) { return FALSE; } - /* Get the default account */ - account = mail_config_get_default_account (); - /* Check for an identity */ - if (!account) { + + if (!mail_config_get_default_identity ()) { GtkWidget *message; message = gnome_warning_dialog_parented (_("You need to configure an identity\n" @@ -127,7 +120,9 @@ check_send_configuration (FolderBrowser *fb) } /* Check for a transport */ - if (!account->transport || !account->transport->url) { + + xport = mail_config_get_transport (); + if (!xport || !xport->url) { GtkWidget *message; message = gnome_warning_dialog_parented (_("You need to configure a mail transport\n" @@ -204,14 +199,14 @@ void send_queued_mail (GtkWidget *widget, gpointer user_data) { extern CamelFolder *outbox_folder; - const MailConfigAccount *account; + MailConfigService *transport; if (!mail_config_is_configured ()) { return; } - account = mail_config_get_default_account (); - if (!account->transport) { + transport = mail_config_get_transport (); + if (!transport) { GtkWidget *win = gtk_widget_get_ancestor (GTK_WIDGET (user_data), GTK_TYPE_WINDOW); @@ -229,7 +224,7 @@ send_queued_mail (GtkWidget *widget, gpointer user_data) return; } - mail_do_send_queue (outbox_folder, account->transport->url); + mail_do_send_queue (outbox_folder, transport->url); } void @@ -296,7 +291,7 @@ composer_sent_cb(char *uri, CamelMimeMessage *message, gboolean sent, void *data void composer_send_cb (EMsgComposer *composer, gpointer data) { - const MailConfigAccount *account = NULL; + MailConfigService *xport = NULL; CamelMimeMessage *message; const CamelInternetAddress *iaddr; const char *subject; @@ -304,7 +299,7 @@ composer_send_cb (EMsgComposer *composer, gpointer data) struct _send_data *send; /* Config info */ - account = mail_config_get_default_account (); + xport = mail_config_get_transport (); /* Get the message */ message = e_msg_composer_get_message (composer); @@ -333,13 +328,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 (account->transport->url, message, composer_sent_cb, send); + mail_send_mail(xport->url, message, composer_sent_cb, send); } void @@ -379,25 +374,25 @@ composer_postpone_cb (EMsgComposer *composer, gpointer data) static GtkWidget * create_msg_composer (const char *url) { - 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; + 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; } void @@ -504,15 +499,13 @@ 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; - - 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 ()); + MailConfigIdentity *id; + + id = mail_config_get_default_identity (); + composer = e_msg_composer_new_with_sig_file(id?id->sig:NULL, mail_config_send_html()); if (composer) { gtk_signal_connect (GTK_OBJECT (composer), "send", GTK_SIGNAL_FUNC (composer_send_cb), NULL); @@ -944,11 +937,7 @@ vfolder_edit_vfolders (BonoboUIComponent *uih, void *user_data, const char *path void providers_config (BonoboUIComponent *uih, void *user_data, const char *path) { - /* FIXME: should we block until mail-config is done? */ - MailAccountsDialog *dialog; - - dialog = mail_accounts_dialog_new ((FOLDER_BROWSER (user_data))->shell); - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); + mail_config ((FOLDER_BROWSER (user_data))->shell); } /* diff --git a/mail/mail-config.c b/mail/mail-config.c index f67d2c7578..a9dfe99928 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -1,23 +1,28 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast <fejj@helixcode.com> - * - * Copyright 2001 Helix Code, Inc. (www.helixcode.com) +/* mail-config.c: Mail configuration dialogs/wizard. */ + +/* + * Authors: + * Dan Winship <danw@helixcode.com> + * Jeffrey Stedfast <fejj@helixcode.com> + * JP Rosevear <jpr@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. + * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) * - * 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 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. * - * 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. + * 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 Place, Suite 330, Boston, MA 02111-1307 + * USA */ #include <config.h> @@ -32,18 +37,20 @@ #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"; @@ -52,22 +59,21 @@ static MailConfig *config = NULL; /* Prototypes */ static void config_read (void); -/* Identity */ +/* Identity struct */ MailConfigIdentity * -identity_copy (const MailConfigIdentity *id) +identity_copy (MailConfigIdentity *id) { - MailConfigIdentity *new; + MailConfigIdentity *newid; - g_return_val_if_fail (id != NULL, NULL); + g_return_val_if_fail (id, NULL); - 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); + 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); - return new; + return newid; } void @@ -78,28 +84,32 @@ identity_destroy (MailConfigIdentity *id) g_free (id->name); g_free (id->address); - g_free (id->reply_to); - g_free (id->organization); - g_free (id->signature); + g_free (id->org); + g_free (id->sig); g_free (id); } -/* Service */ +void +identity_destroy_each (gpointer item, gpointer data) +{ + identity_destroy ((MailConfigIdentity *)item); +} + +/* Service struct */ MailConfigService * -service_copy (const MailConfigService *source) +service_copy (MailConfigService *source) { - MailConfigService *new; + MailConfigService *newsource; - g_return_val_if_fail (source != NULL, NULL); + g_return_val_if_fail (source, NULL); - 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; + 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; - return new; + return newsource; } void @@ -107,7 +117,7 @@ service_destroy (MailConfigService *source) { if (!source) return; - + g_free (source->url); g_free (source); @@ -119,46 +129,6 @@ 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_account = account->default_account; - - 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) @@ -167,6 +137,11 @@ mail_config_init (void) return; config = g_new0 (MailConfig, 1); + + config->ids = NULL; + config->sources = NULL; + config->transport = NULL; + config_read (); } @@ -176,20 +151,26 @@ mail_config_clear (void) if (!config) return; - if (config->accounts) { - g_slist_foreach (config->accounts, account_destroy_each, NULL); - g_slist_free (config->accounts); - config->accounts = NULL; + if (config->ids) { + g_slist_foreach (config->ids, identity_destroy_each, NULL); + g_slist_free (config->ids); + config->ids = 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); config->news = NULL; } - - /* overkill? */ - memset (config, 0, sizeof (MailConfig)); } static void @@ -197,79 +178,66 @@ 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); - /* Accounts */ - str = g_strdup_printf ("=%s/config/Mail=/Accounts/", evolution_dir); + /* Identities */ + str = g_strdup_printf ("=%s/config/Mail=/Identities/", 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; - 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_is_default_%d", i); - account->default_account = gnome_config_get_bool (path) && !have_default; - if (account->default_account) - have_default = TRUE; - g_free (path); - - /* get the identity info */ - id = g_new0 (MailConfigIdentity, 1); - path = g_strdup_printf ("identity_name_%d", i); + id = g_new0 (MailConfigIdentity, 1); + + path = g_strdup_printf ("name_%d", i); id->name = gnome_config_get_string (path); g_free (path); - 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); + path = g_strdup_printf ("address_%d", i); id->address = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("identity_organization_%d", i); - id->organization = gnome_config_get_string (path); + path = g_strdup_printf ("org_%d", i); + id->org = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("identity_signature_%d", i); - id->signature = gnome_config_get_string (path); + path = g_strdup_printf ("sig_%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; - /* 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); + s = g_new0 (MailConfigService, 1); + + path = g_strdup_printf ("url_%d", i); + s->url = gnome_config_get_string (path); g_free (path); - path = g_strdup_printf ("source_save_passwd_%d", i); - source->save_passwd = gnome_config_get_bool (path); + path = g_strdup_printf ("keep_on_server_%d", i); + s->keep_on_server = gnome_config_get_bool (path); g_free (path); - - /* get the transport */ - transport = g_new0 (MailConfigService, 1); - path = g_strdup_printf ("transport_url_%d", i); - transport->url = gnome_config_get_string (path); + path = g_strdup_printf ("remember_password_%d", i); + s->remember_password = gnome_config_get_bool (path); g_free (path); - account->id = id; - account->source = source; - account->transport = transport; - - config->accounts = g_slist_append (config->accounts, account); + config->sources = g_slist_append (config->sources, s); } gnome_config_pop_prefix (); @@ -277,46 +245,53 @@ 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 (); } @@ -325,7 +300,7 @@ mail_config_write (void) { gchar *str; gint len, i; - + /* Configured switch */ str = g_strdup_printf ("=%s/config/General=/General/configured", evolution_dir); @@ -333,90 +308,96 @@ mail_config_write (void) gnome_config_set_bool (str, config->configured); g_free (str); - /* Accounts */ - str = g_strdup_printf ("=%s/config/Mail=/Accounts/", evolution_dir); + /* Identities */ + str = g_strdup_printf ("=%s/config/Mail=/Identities/", evolution_dir); gnome_config_push_prefix (str); g_free (str); - - len = g_slist_length (config->accounts); + + len = g_slist_length (config->ids); gnome_config_set_int ("num", len); for (i = 0; i < len; i++) { - MailConfigAccount *account; + MailConfigIdentity *id; gchar *path; - account = g_slist_nth_data (config->accounts, i); - - /* account info */ - path = g_strdup_printf ("account_name_%d", i); - gnome_config_set_string (path, account->name); - g_free (path); - path = g_strdup_printf ("account_is_default_%d", i); - gnome_config_set_bool (path, account->default_account); - g_free (path); + id = (MailConfigIdentity *)g_slist_nth_data (config->ids, i); - /* identity info */ - path = g_strdup_printf ("identity_name_%d", i); - gnome_config_set_string (path, account->id->name); + path = g_strdup_printf ("name_%d", i); + gnome_config_set_string (path, id->name); g_free (path); - path = g_strdup_printf ("identity_address_%d", i); - gnome_config_set_string (path, account->id->address); + path = g_strdup_printf ("address_%d", i); + gnome_config_set_string (path, id->address); g_free (path); - path = g_strdup_printf ("identity_organization_%d", i); - gnome_config_set_string (path, account->id->organization); + path = g_strdup_printf ("org_%d", i); + gnome_config_set_string (path, id->org); g_free (path); - path = g_strdup_printf ("identity_signature_%d", i); - gnome_config_set_string (path, account->id->signature); + path = g_strdup_printf ("sig_%d", i); + gnome_config_set_string (path, id->sig); 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; - /* 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); + s = (MailConfigService *)g_slist_nth_data (config->sources, i); + + path = g_strdup_printf ("url_%d", i); + gnome_config_set_string (path, s->url); g_free (path); - path = g_strdup_printf ("source_save_passwd_%d", i); - gnome_config_set_bool (path, account->source->save_passwd); + path = g_strdup_printf ("keep_on_server_%d", i); + gnome_config_set_bool (path, s->keep_on_server); g_free (path); - - /* transport info */ - path = g_strdup_printf ("transport_url_%d", i); - gnome_config_set_string (path, account->transport->url); + path = g_strdup_printf ("remember_password_%d", i); + gnome_config_set_bool (path, s->remember_password); 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 = g_slist_nth_data (config->news, i); + n = (MailConfigService *)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 (); } @@ -426,29 +407,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"); - sources = mail_config_get_sources (); - for ( ; sources; sources = sources->next) { + for (sources = config->sources; sources; sources = sources->next) { s = sources->data; - if (s->save_passwd) + if (s->remember_password) mail_session_remember_password (s->url); } - g_slist_free (sources); - + gnome_config_sync (); } @@ -460,21 +439,21 @@ mail_config_is_configured (void) } gboolean -mail_config_get_thread_list (void) +mail_config_thread_list (void) { return config->thread_list; } -void -mail_config_set_thread_list (gboolean value) +gboolean +mail_config_view_source (void) { - config->thread_list = value; + return config->view_source; } -gboolean -mail_config_get_view_source (void) +void +mail_config_set_thread_list (gboolean value) { - return config->view_source; + config->thread_list = value; } void @@ -484,7 +463,7 @@ mail_config_set_view_source (gboolean value) } gint -mail_config_get_paned_size (void) +mail_config_paned_size (void) { return config->paned_size; } @@ -496,7 +475,7 @@ mail_config_set_paned_size (gint value) } gboolean -mail_config_get_send_html (void) +mail_config_send_html (void) { return config->send_html; } @@ -508,7 +487,7 @@ mail_config_set_send_html (gboolean send_html) } gint -mail_config_get_mark_as_seen_timeout (void) +mail_config_mark_as_seen_timeout (void) { return config->seen_timeout; } @@ -519,94 +498,68 @@ mail_config_set_mark_as_seen_timeout (gint timeout) config->seen_timeout = timeout; } -const MailConfigAccount * -mail_config_get_default_account (void) +MailConfigIdentity * +mail_config_get_default_identity (void) { - const MailConfigAccount *account; - GSList *l; - - if (!config->accounts) + if (!config->ids) return NULL; - /* 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; + return (MailConfigIdentity *)config->ids->data; } -const GSList * -mail_config_get_accounts (void) +GSList * +mail_config_get_identities (void) { - return config->accounts; + return config->ids; } void -mail_config_add_account (MailConfigAccount *account) +mail_config_add_identity (MailConfigIdentity *id) { - if (account->default_account) { - /* Un-defaultify other accounts */ - GSList *node = config->accounts; - - while (node) { - MailConfigAccount *acnt = node->data; - - acnt->default_account = FALSE; - - node = node->next; - } - } + MailConfigIdentity *new_id = identity_copy (id); - config->accounts = g_slist_append (config->accounts, account); + config->ids = g_slist_append (config->ids, new_id); } -void -mail_config_set_default_account (const MailConfigAccount *account) +MailConfigService * +mail_config_get_default_source (void) { - GSList *node = config->accounts; - - while (node) { - MailConfigAccount *acnt = node->data; - - acnt->default_account = FALSE; - - node = node->next; - } + if (!config->sources) + return NULL; - ((MailConfigAccount *) account)->default_account = TRUE; + return (MailConfigService *)config->sources->data; } -const MailConfigIdentity * -mail_config_get_default_identity (void) +GSList * +mail_config_get_sources (void) { - const MailConfigAccount *account; - - account = mail_config_get_default_account (); - if (account) - return account->id; - else - return NULL; + return config->sources; } -const MailConfigService * -mail_config_get_default_transport (void) +void +mail_config_add_source (MailConfigService *source) { - const MailConfigAccount *account; + MailConfigService *new_source = service_copy (source); - account = mail_config_get_default_account (); - if (account) - return account->transport; - else - return NULL; + config->sources = g_slist_append (config->sources, new_source); +} + +MailConfigService * +mail_config_get_transport (void) +{ + return config->transport; +} + +void +mail_config_set_transport (MailConfigService *transport) +{ + if (config->transport) + service_destroy (config->transport); + + config->transport = transport; } -const MailConfigService * +MailConfigService * mail_config_get_default_news (void) { if (!config->news) @@ -615,7 +568,7 @@ mail_config_get_default_news (void) return (MailConfigService *)config->news->data; } -const GSList * +GSList * mail_config_get_news (void) { return config->news; @@ -624,104 +577,24 @@ mail_config_get_news (void) void mail_config_add_news (MailConfigService *news) { - config->news = g_slist_append (config->news, news); -} + MailConfigService *new_news = service_copy (news); -GSList * -mail_config_get_sources (void) -{ - const GSList *accounts; - GSList *sources = NULL; - - accounts = mail_config_get_accounts (); - while (accounts) { - const MailConfigAccount *account = accounts->data; - - if (account->source) - sources = g_slist_append (sources, account->source); - - accounts = accounts->next; - } - - return sources; + config->news = g_slist_append (config->news, new_news); } 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 5c40b832f2..bbf7176acb 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -1,8 +1,7 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + /* - * 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 @@ -17,58 +16,41 @@ * 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.h> -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ -typedef struct { +#include <glib.h> +#include <camel/camel-folder.h> + +typedef struct +{ gchar *name; gchar *address; - gchar *reply_to; - gchar *organization; - gchar *signature; + gchar *org; + gchar *sig; } MailConfigIdentity; -typedef struct { +typedef struct +{ gchar *url; gboolean keep_on_server; - gboolean save_passwd; - gboolean use_ssl; + gboolean remember_password; } MailConfigService; -typedef struct { - gchar *name; - gboolean default_account; - - MailConfigIdentity *id; - MailConfigService *source; - MailConfigService *transport; -} MailConfigAccount; - /* Identities */ -MailConfigIdentity *identity_copy (const MailConfigIdentity *id); +MailConfigIdentity *identity_copy (MailConfigIdentity *id); void identity_destroy (MailConfigIdentity *id); +void identity_destroy_each (gpointer item, gpointer data); /* Services */ -MailConfigService *service_copy (const MailConfigService *source); +MailConfigService *service_copy (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); @@ -76,45 +58,38 @@ void mail_config_write (void); void mail_config_write_on_exit (void); /* General Accessor functions */ -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); +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); /* 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); -gboolean mail_config_check_service (CamelURL *url, CamelProviderType type, GList **authtypes); +#endif -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* MAIL_CONFIG_H */ diff --git a/mail/mail-display.c b/mail/mail-display.c index 43f61138ad..c1fb94c5f3 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -835,7 +835,7 @@ redisplay (MailDisplay *md, gboolean unscroll) if (md->current_message) { camel_object_ref (CAMEL_OBJECT (md->current_message)); - if (mail_config_get_view_source ()) + if (mail_config_view_source ()) mail_format_raw_message (md->current_message, md); else mail_format_mime_message (md->current_message, md); diff --git a/mail/mail-format.c b/mail/mail-format.c index aaefd4856f..c4f9ef2b7c 100644 --- a/mail/mail-format.c +++ b/mail/mail-format.c @@ -1654,7 +1654,7 @@ mail_generate_reply (CamelMimeMessage *message, gboolean to_all) const char *message_id, *references; const char *name = NULL, *address = NULL; GList *to = NULL, *cc = NULL; - const MailConfigIdentity *id; + MailConfigIdentity *id; gchar *sig_file = NULL; const CamelInternetAddress *reply_to, *sender; time_t date; @@ -1662,9 +1662,9 @@ mail_generate_reply (CamelMimeMessage *message, gboolean to_all) id = mail_config_get_default_identity (); if (id) - sig_file = id->signature; + sig_file = id->sig; - composer = e_msg_composer_new_with_sig_file (sig_file, mail_config_get_send_html ()); + composer = e_msg_composer_new_with_sig_file (sig_file, mail_config_send_html ()); if (!composer) return NULL; diff --git a/mail/mail-tools.c b/mail/mail-tools.c index ff82630e53..a564818b3c 100644 --- a/mail/mail-tools.c +++ b/mail/mail-tools.c @@ -557,7 +557,7 @@ mail_tool_quote_message (CamelMimeMessage *message, const char *fmt, ...) gboolean want_plain, is_html; gchar *text; - want_plain = !mail_config_get_send_html (); + want_plain = !mail_config_send_html (); contents = camel_medium_get_content_object (CAMEL_MEDIUM (message)); text = mail_get_message_body (contents, want_plain, &is_html); |