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.
This commit is contained in:
Matthew Barnes
2011-01-21 17:40:22 -05:00
parent b1565f53d7
commit 54ae8f0a7d
4 changed files with 42 additions and 2 deletions

View File

@ -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>

View File

@ -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);
}

View File

@ -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,

View File

@ -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