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:
@ -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 "{0}".</_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>
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user