From 875c9d02c44ae6a0b0c1485e7e61a9dd25c5add7 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Mon, 8 Jan 2001 20:51:24 +0000 Subject: Reverted mail-config changes temporarily until I get it working correctly. 2001-01-08 Jeffrey Stedfast * 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. svn path=/trunk/; revision=7305 --- mail/mail-config.c | 589 +++++++++++++++++++++-------------------------------- 1 file changed, 231 insertions(+), 358 deletions(-) (limited to 'mail/mail-config.c') 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 - * - * Copyright 2001 Helix Code, Inc. (www.helixcode.com) +/* mail-config.c: Mail configuration dialogs/wizard. */ + +/* + * Authors: + * Dan Winship + * Jeffrey Stedfast + * JP Rosevear * - * 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 @@ -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; isource->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; inews, 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; -} -- cgit v1.2.3