[evolution] Cleanup work prior to bug #588833 investigation.



commit 6627772b60a58db60522147d1da5f49349dc3897
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Feb 18 12:57:39 2010 -0500

    Cleanup work prior to bug #588833 investigation.

 mail/em-utils.c |  101 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 64 insertions(+), 37 deletions(-)
---
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 92fd531..a2a6705 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -2091,18 +2091,33 @@ em_utils_url_unescape_amp (const gchar *url)
 }
 
 static EAccount *
-guess_account_folder (CamelFolder *folder)
+guess_account_from_folder (CamelFolder *folder)
 {
+	CamelService *service;
 	EAccount *account;
-	gchar *tmp;
+	gchar *source_url;
 
-	tmp = camel_url_to_string (CAMEL_SERVICE (folder->parent_store)->url, CAMEL_URL_HIDE_ALL);
-	account = mail_config_get_account_by_source_url (tmp);
-	g_free (tmp);
+	service = CAMEL_SERVICE (folder->parent_store);
+
+	source_url = camel_url_to_string (service->url, CAMEL_URL_HIDE_ALL);
+	account = mail_config_get_account_by_source_url (source_url);
+	g_free (source_url);
 
 	return account;
 }
 
+static EAccount *
+guess_account_from_message (CamelMimeMessage *message)
+{
+	const gchar *source_url;
+
+	source_url = camel_mime_message_get_source (message);
+	if (source_url == NULL)
+		return NULL;
+
+	return mail_config_get_account_by_source_url (source_url);
+}
+
 GHashTable *
 em_utils_generate_account_hash (void)
 {
@@ -2152,65 +2167,77 @@ em_utils_generate_account_hash (void)
 }
 
 EAccount *
-em_utils_guess_account_with_recipients (CamelMimeMessage *message, CamelFolder *folder)
+em_utils_guess_account_with_recipients (CamelMimeMessage *message,
+                                        CamelFolder *folder)
 {
 	GHashTable *account_hash = NULL;
 	EAccount *account = NULL;
-	const gchar *tmp;
-	gint i;
-	GList *l, *recipients = NULL;
+	GList *iter, *recipients = NULL;
 	const CamelInternetAddress *addr;
+	const gchar *type;
+
+	g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
 
 	account = em_utils_guess_account (message, folder);
-	if (account)
+	if (account != NULL)
 		return account;
-	addr = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO);
-	if (addr)
+
+	type = CAMEL_RECIPIENT_TYPE_TO;
+	addr = camel_mime_message_get_recipients (message, type);
+	if (addr != NULL)
 		recipients = g_list_append (recipients, (gpointer) addr);
-	addr = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_CC);
-	if (addr)
+
+	type = CAMEL_RECIPIENT_TYPE_CC;
+	addr = camel_mime_message_get_recipients (message, type);
+	if (addr != NULL)
 		recipients = g_list_append (recipients, (gpointer) addr);
 
 	/* finally recipient (to/cc) in account table */
 	account_hash = em_utils_generate_account_hash ();
-	for (l = recipients; l == NULL; l = l->next) {
-		const CamelInternetAddress *to;
-
-		to = (CamelInternetAddress*)l->data;
-		if (to) {
-			for (i = 0; camel_internet_address_get(to, i, NULL, &tmp); i++) {
-				account = g_hash_table_lookup(account_hash, tmp);
-				if (account && account->enabled)
-					break;
-			}
+	for (iter = recipients; iter == NULL; iter = iter->next) {
+		const gchar *tmp;
+		gint ii = 0;
+
+		addr = (CamelInternetAddress *) iter->data;
+
+		/* XXX Is this necessary? */
+		if (addr == NULL)
+			continue;
+
+		while (camel_internet_address_get (addr, ii++, NULL, &tmp)) {
+			account = g_hash_table_lookup (account_hash, tmp);
+			if (account != NULL && account->enabled)
+				break;
 		}
 	}
-	g_hash_table_destroy(account_hash);
+	g_hash_table_destroy (account_hash);
 
 	return account;
 }
 
 EAccount *
-em_utils_guess_account (CamelMimeMessage *message, CamelFolder *folder)
+em_utils_guess_account (CamelMimeMessage *message,
+                        CamelFolder *folder)
 {
 	EAccount *account = NULL;
-	const gchar *tmp;
+
+	g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
+
+	if (folder != NULL)
+		g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
 	/* check for newsgroup header */
-	if (folder
-	    && camel_medium_get_header ((CamelMedium *)message, "Newsgroups")
-	    && (account = guess_account_folder (folder)))
-		return account;
+	if (folder != NULL
+	    && camel_medium_get_header (CAMEL_MEDIUM (message), "Newsgroups"))
+		account = guess_account_from_folder (folder);
 
 	/* check for source folder */
-	if (folder)
-		account = guess_account_folder (folder);
+	if (account == NULL && folder != NULL)
+		account = guess_account_from_folder (folder);
 
 	/* then message source */
-	if (account == NULL
-	    && (tmp = camel_mime_message_get_source (message))) {
-		account = mail_config_get_account_by_source_url (tmp);
-	}
+	if (account == NULL)
+		account = guess_account_from_message (message);
 
 	return account;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]