aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-05-30 04:50:27 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-05-30 04:50:27 +0800
commit13089f0d5088cf138697121a0839bd7d3ed85e42 (patch)
tree1980c9c999093eb6cb89e024998e46ab1f1eefc8
parent9b9d1935d74818bfbaf32160fa8458be5d86ecd9 (diff)
downloadgsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.tar
gsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.tar.gz
gsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.tar.bz2
gsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.tar.lz
gsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.tar.xz
gsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.tar.zst
gsoc2013-evolution-13089f0d5088cf138697121a0839bd7d3ed85e42.zip
e_mail_session_send_to(): Don't silently ignore if we can't send.
If sending fails for any reason, return a suitable GError. Don't just return silently. Also check for a wider range of errors indicating the service is unavailable in composer_send_completed(). This will trigger the "save-to-outbox" info alert.
-rw-r--r--libemail-engine/e-mail-session-utils.c9
-rw-r--r--mail/em-composer-utils.c28
2 files changed, 20 insertions, 17 deletions
diff --git a/libemail-engine/e-mail-session-utils.c b/libemail-engine/e-mail-session-utils.c
index fb1ce9d6e6..0938caeb33 100644
--- a/libemail-engine/e-mail-session-utils.c
+++ b/libemail-engine/e-mail-session-utils.c
@@ -541,13 +541,6 @@ mail_session_send_to_thread (GSimpleAsyncResult *simple,
return;
}
- provider = camel_service_get_provider (context->transport);
- if ((provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0 &&
- !camel_session_get_online (CAMEL_SESSION (session))) {
- /* silently ignore */
- return;
- }
-
status = camel_service_get_connection_status (context->transport);
if (status != CAMEL_SERVICE_CONNECTED) {
did_connect = TRUE;
@@ -561,6 +554,8 @@ mail_session_send_to_thread (GSimpleAsyncResult *simple,
}
}
+ provider = camel_service_get_provider (context->transport);
+
if (provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER)
copy_to_sent = FALSE;
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 0f801b4266..a8815f6f54 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -516,6 +516,7 @@ composer_send_completed (EMailSession *session,
AsyncContext *context)
{
GError *error = NULL;
+ gboolean service_unavailable;
gboolean set_changed = FALSE;
e_mail_session_send_to_finish (session, result, &error);
@@ -525,6 +526,23 @@ composer_send_completed (EMailSession *session,
goto exit;
}
+ /* Check for error codes which may indicate we're offline
+ * or name resolution failed or connection attempt failed. */
+ service_unavailable =
+ g_error_matches (
+ error, CAMEL_SERVICE_ERROR,
+ CAMEL_SERVICE_ERROR_UNAVAILABLE) ||
+ /* XXX camel_getaddrinfo() sets this, unfortunately. */
+ g_error_matches (error, CAMEL_ERROR, CAMEL_ERROR_GENERIC);
+ if (service_unavailable) {
+ /* Inform the user. */
+ e_alert_run_dialog_for_args (
+ GTK_WINDOW (context->composer),
+ "mail-composer:saving-to-outbox", NULL);
+ e_msg_composer_save_to_outbox (context->composer);
+ goto exit;
+ }
+
/* Post-processing errors are shown in the shell window. */
if (g_error_matches (error, E_MAIL_ERROR, E_MAIL_ERROR_POST_PROCESSING)) {
EAlert *alert;
@@ -538,16 +556,6 @@ composer_send_completed (EMailSession *session,
e_shell_submit_alert (shell, alert);
g_object_unref (alert);
- /* The destination store is offline => save to Outbox and try again later */
- } else if (g_error_matches (error, CAMEL_SERVICE_ERROR, CAMEL_SERVICE_ERROR_UNAVAILABLE)) {
- /* Inform the user. */
- e_alert_run_dialog_for_args (
- GTK_WINDOW (context->composer),
- "mail-composer:saving-to-outbox", NULL);
- e_msg_composer_save_to_outbox (context->composer);
-
- goto exit;
-
/* All other errors are shown in the composer window. */
} else if (error != NULL) {
gint response;