[evolution] Cannot send message with just enabled account



commit b6324935dbfe1e26ae883955f0939ce734a4d0ae
Author: Milan Crha <mcrha redhat com>
Date:   Thu May 12 08:26:58 2011 +0200

    Cannot send message with just enabled account
    
    Everything in UI seemed as working fine, but the message is just lost,
    even there was printed a runtime warning on the console.
    This is fixing couple things along this issue:
    - differentiate between NULL and invalid pointers/objects
      in new e_mail_folder_uri_...() functions
    - report error to UI if mail_session_send_to_thread() fails to find
      corresponding transport service
    - call e_mail_store_add_by_account() in mail_store_load_accounts()
      (a side-effect of this change is no code duplication and unified
      processing of the same action)

 mail/e-mail-folder-utils.c  |    4 ++
 mail/e-mail-session-utils.c |    7 +++-
 mail/e-mail-store.c         |   91 +++++++++++++++++--------------------------
 3 files changed, 46 insertions(+), 56 deletions(-)
---
diff --git a/mail/e-mail-folder-utils.c b/mail/e-mail-folder-utils.c
index 6f23158..905874e 100644
--- a/mail/e-mail-folder-utils.c
+++ b/mail/e-mail-folder-utils.c
@@ -686,6 +686,7 @@ e_mail_folder_uri_build (CamelStore *store,
 	gchar *encoded_uid;
 	gchar *uri;
 
+	g_return_val_if_fail (store != NULL, NULL);
 	g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
 	g_return_val_if_fail (folder_name != NULL, NULL);
 
@@ -743,6 +744,7 @@ e_mail_folder_uri_parse (CamelSession *session,
 	gchar *folder_name = NULL;
 	gboolean success = FALSE;
 
+	g_return_val_if_fail (session != NULL, FALSE);
 	g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
 	g_return_val_if_fail (folder_uri != NULL, FALSE);
 
@@ -883,6 +885,7 @@ e_mail_folder_uri_equal (CamelSession *session,
 	gboolean success_b;
 	gboolean equal = FALSE;
 
+	g_return_val_if_fail (session != NULL, FALSE);
 	g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
 	g_return_val_if_fail (folder_uri_a != NULL, FALSE);
 	g_return_val_if_fail (folder_uri_b != NULL, FALSE);
@@ -934,6 +937,7 @@ e_mail_folder_uri_from_folder (CamelFolder *folder)
 	CamelStore *store;
 	const gchar *folder_name;
 
+	g_return_val_if_fail (folder != NULL, NULL);
 	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 
 	store = camel_folder_get_parent_store (folder);
diff --git a/mail/e-mail-session-utils.c b/mail/e-mail-session-utils.c
index b307fdc..ae9bd96 100644
--- a/mail/e-mail-session-utils.c
+++ b/mail/e-mail-session-utils.c
@@ -406,7 +406,12 @@ mail_session_send_to_thread (GSimpleAsyncResult *simple,
 		service = camel_session_get_service (
 			CAMEL_SESSION (session), context->transport_uid);
 
-		g_return_if_fail (CAMEL_IS_TRANSPORT (service));
+		if (!CAMEL_IS_TRANSPORT (service)) {
+			g_simple_async_result_set_error (simple,
+				CAMEL_SERVICE_ERROR, CAMEL_SERVICE_ERROR_URL_INVALID,
+				_("Cannot get transport service for account '%s'"), context->transport_uid);
+			return;
+		}
 
 		/* XXX This API does not allow for cancellation. */
 		if (!camel_service_connect_sync (service, &error)) {
diff --git a/mail/e-mail-store.c b/mail/e-mail-store.c
index 214efb0..d61f852 100644
--- a/mail/e-mail-store.c
+++ b/mail/e-mail-store.c
@@ -235,67 +235,15 @@ mail_store_load_accounts (EMailSession *session,
 	account_list = e_get_account_list ();
 
 	for (iter = e_list_get_iterator ((EList *) account_list);
-		e_iterator_is_valid (iter); e_iterator_next (iter)) {
-
+	     e_iterator_is_valid (iter); e_iterator_next (iter)) {
 		EAccount *account;
-		CamelURL *url;
-		gchar *transport_uid;
-		gboolean skip = FALSE;
-		GError *error = NULL;
 
 		account = (EAccount *) e_iterator_get (iter);
 
 		if (!account->enabled)
 			continue;
 
-		/* Do not add local-delivery files,
-		 * but make them ready for later use. */
-		url = camel_url_new (account->source->url, NULL);
-		if (url != NULL) {
-			skip = em_utils_is_local_delivery_mbox_file (url);
-			camel_url_free (url);
-		}
-
-		if (skip) {
-			GError *error = NULL;
-
-			camel_session_add_service (
-				CAMEL_SESSION (session),
-				account->uid, account->source->url,
-				CAMEL_PROVIDER_STORE, &error);
-
-			if (error != NULL) {
-				g_warning (
-					"Failed to add '%s' as store: %s",
-					account->source->url,
-					error->message);
-				g_error_free (error);
-			}
-		} else {
-			e_mail_store_add_by_account (session, account);
-		}
-
-		/* While we're at it, add the account's transport to the
-		 * CamelSession.  The transport's UID is a kludge for now.
-		 * We take the EAccount's UID and tack on "-transport". */
-
-		if (account->transport == NULL)
-			continue;
-
-		transport_uid = g_strconcat (
-			account->uid, "-transport", NULL);
-
-		camel_session_add_service (
-			CAMEL_SESSION (session),
-			transport_uid, account->transport->url,
-			CAMEL_PROVIDER_TRANSPORT, &error);
-
-		g_free (transport_uid);
-
-		if (error != NULL) {
-			g_warning ("%s", error->message);
-			g_error_free (error);
-		}
+		e_mail_store_add_by_account (session, account);
 	}
 
 	g_object_unref (iter);
@@ -344,6 +292,8 @@ e_mail_store_add_by_account (EMailSession *session,
 {
 	CamelService *service;
 	CamelProvider *provider;
+	CamelURL *url;
+	gboolean skip;
 	GError *error = NULL;
 
 	g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL);
@@ -361,10 +311,41 @@ e_mail_store_add_by_account (EMailSession *session,
 		account->uid, account->source->url,
 		CAMEL_PROVIDER_STORE, &error);
 
+	if (account->transport) {
+		/* While we're at it, add the account's transport to the
+		 * CamelSession.  The transport's UID is a kludge for now.
+		 * We take the EAccount's UID and tack on "-transport". */
+		gchar *transport_uid;
+		GError *transport_error = NULL;
+
+		transport_uid = g_strconcat (
+			account->uid, "-transport", NULL);
+
+		camel_session_add_service (
+			CAMEL_SESSION (session),
+			transport_uid, account->transport->url,
+			CAMEL_PROVIDER_TRANSPORT, &transport_error);
+
+		g_free (transport_uid);
+
+		if (transport_error) {
+			g_warning ("%s: Failed to add transport service: %s", G_STRFUNC, transport_error->message);
+			g_error_free (transport_error);
+		}
+	}
+
 	if (!CAMEL_IS_STORE (service))
 		goto fail;
 
-	if (provider->flags & CAMEL_PROVIDER_IS_STORAGE)
+	/* Do not add local-delivery files,
+	 * but make them ready for later use. */
+	url = camel_url_new (account->source->url, NULL);
+	if (url != NULL) {
+		skip = em_utils_is_local_delivery_mbox_file (url);
+		camel_url_free (url);
+	}
+
+	if (!skip && (provider->flags & CAMEL_PROVIDER_IS_STORAGE))
 		e_mail_store_add (
 			session, CAMEL_STORE (service), account->name);
 



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