From 15c32eafdb8a79152113559bd8a5e8f9e72f142c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 21 Jan 2011 17:40:22 -0500 Subject: 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. --- mail/e-mail-session-utils.c | 16 +++++++++++++++- mail/e-mail-session-utils.h | 7 +++++++ mail/em-composer-utils.c | 16 +++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-session-utils.c b/mail/e-mail-session-utils.c index f91bc73455..f77f1cac73 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 e7ec28dd2d..c59d27f335 100644 --- a/mail/e-mail-session-utils.h +++ b/mail/e-mail-session-utils.h @@ -23,8 +23,15 @@ #include +#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 5dfa1ffa05..2668e2f1e0 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 -- cgit v1.2.3