diff --git a/src/engine/api/geary-client-service.vala b/src/engine/api/geary-client-service.vala index 0fbb76ce..2ff1204a 100644 --- a/src/engine/api/geary-client-service.vala +++ b/src/engine/api/geary-client-service.vala @@ -400,6 +400,8 @@ public abstract class Geary.ClientService : BaseObject, Logging.Source { this.last_error = error; this.current_status = CONNECTION_FAILED; connection_error(error); + // Network error, so try to connect again + on_connectivity_change(); } /** diff --git a/src/engine/imap/api/imap-client-service.vala b/src/engine/imap/api/imap-client-service.vala index c956850b..12258515 100644 --- a/src/engine/imap/api/imap-client-service.vala +++ b/src/engine/imap/api/imap-client-service.vala @@ -546,6 +546,12 @@ public class Geary.Imap.ClientService : Geary.ClientService { session, (obj, res) => { this.remove_session_async.end(res); } ); + if (session.disconnected == ClientSession.DisconnectReason.REMOTE_ERROR) { + Geary.ErrorContext context = new Geary.ErrorContext( + new GLib.IOError.NOT_CONNECTED("Session disconnected, remote error") + ); + notify_connection_failed(context); + } } } diff --git a/src/engine/util/util-connectivity-manager.vala b/src/engine/util/util-connectivity-manager.vala index ac5bf66c..14216bba 100644 --- a/src/engine/util/util-connectivity-manager.vala +++ b/src/engine/util/util-connectivity-manager.vala @@ -189,8 +189,9 @@ public class Geary.ConnectivityManager : BaseObject { // localhost. (This is a Linux program, after all...) debug("Network changed: %s", some_available ? "some available" : "none available"); + + cancel_check(); if (some_available) { - cancel_check(); this.delayed_check.start_ms(CHECK_SOON); } else { // None available, so definitely not reachable.