[evolution/wip/gsettings] Bug 640091 - Improve error handling during send post-processing



commit 15c32eafdb8a79152113559bd8a5e8f9e72f142c
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Jan 21 17:40:22 2011 -0500

    Bug 640091 - Improve error handling during send post-processing
    
    If a newly-composed message was successfully sent but an error occurred
    during post-processing (outgoing filters or appending to a Sent folder),
    close the composer window and show an alert in the main window.

 composer/mail-composer.error.xml |    5 +++++
 mail/e-mail-session-utils.c      |   16 +++++++++++++++-
 mail/e-mail-session-utils.h      |    7 +++++++
 mail/em-composer-utils.c         |   16 +++++++++++++++-
 4 files changed, 42 insertions(+), 2 deletions(-)
---
diff --git a/composer/mail-composer.error.xml b/composer/mail-composer.error.xml
index e265aaa..7398f17 100644
--- a/composer/mail-composer.error.xml
+++ b/composer/mail-composer.error.xml
@@ -77,6 +77,11 @@
   <button _label="_Try Again" response="GTK_RESPONSE_OK"/>
  </error>
 
+ <error id="send-post-processing-error" type="warning">
+   <_primary>Your message was sent, but an error occurred during post-processing.</_primary>
+  <_secondary>The reported error was &quot;{0}&quot;.</_secondary>
+ </error>
+
  <error id="saving-to-outbox" type="info">
   <_primary>Saving message to Outbox.</_primary>
   <_secondary>Because you are working offline, the message will be saved to your local Outbox folder. When you are back online you can send the message by clicking the Send/Receive button in Evolution's toolbar.</_secondary>
diff --git a/mail/e-mail-session-utils.c b/mail/e-mail-session-utils.c
index f91bc73..f77f1ca 100644
--- a/mail/e-mail-session-utils.c
+++ b/mail/e-mail-session-utils.c
@@ -101,6 +101,19 @@ async_context_free (AsyncContext *context)
 	g_slice_free (AsyncContext, context);
 }
 
+GQuark
+e_mail_error_quark (void)
+{
+	static GQuark quark = 0;
+
+	if (G_UNLIKELY (quark == 0)) {
+		const gchar *string = "e-mail-error-quark";
+		quark = g_quark_from_static_string (string);
+	}
+
+	return quark;
+}
+
 static void
 mail_session_handle_draft_headers_thread (GSimpleAsyncResult *simple,
                                           EMailSession *session,
@@ -590,7 +603,8 @@ exit:
 	/* Stuff the accumulated error messages in a GError. */
 	} else if (error_messages->len > 0) {
 		g_simple_async_result_set_error (
-			simple, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
+			simple, E_MAIL_ERROR,
+			E_MAIL_ERROR_POST_PROCESSING,
 			"%s", error_messages->str);
 	}
 
diff --git a/mail/e-mail-session-utils.h b/mail/e-mail-session-utils.h
index e7ec28d..c59d27f 100644
--- a/mail/e-mail-session-utils.h
+++ b/mail/e-mail-session-utils.h
@@ -23,8 +23,15 @@
 
 #include <mail/e-mail-session.h>
 
+#define E_MAIL_ERROR (e_mail_error_quark ())
+
 G_BEGIN_DECLS
 
+typedef enum {
+	E_MAIL_ERROR_POST_PROCESSING
+} EMailError;
+
+GQuark		e_mail_error_quark		(void) G_GNUC_CONST;
 gboolean	e_mail_session_handle_draft_headers_sync
 						(EMailSession *session,
 						 CamelMimeMessage *message,
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 5dfa1ff..2668e2f 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -489,7 +489,21 @@ composer_send_completed (EMailSession *session,
 		goto exit;
 	}
 
-	if (error != NULL) {
+	/* Post-processing errors are shown in the shell window. */
+	if (g_error_matches (error, E_MAIL_ERROR, E_MAIL_ERROR_POST_PROCESSING)) {
+		EAlert *alert;
+		EShell *shell;
+
+		shell = e_msg_composer_get_shell (context->composer);
+
+		alert = e_alert_new (
+			"mail-composer:send-post-processing-error",
+			error->message, NULL);
+		e_shell_submit_alert (shell, alert);
+		g_object_unref (alert);
+
+	/* All other errors are shown in the composer window. */
+	} else if (error != NULL) {
 		gint response;
 
 		/* Clear the activity bar before



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