From 5dde584f1fc308ca5689d7bbc767428e923c5dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bellegarde?= Date: Tue, 3 Oct 2023 16:42:42 +0200 Subject: [PATCH] engine: Ensure we try to connect again on connection error Fix #1552 --- src/engine/api/geary-client-service.vala | 2 ++ src/engine/imap/api/imap-client-service.vala | 6 ++++++ src/engine/util/util-connectivity-manager.vala | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) 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.