From 96985c9c1f411854823c6b5003b2af65d02e51b9 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sat, 12 Sep 2020 21:34:34 +0300 Subject: [PATCH] melib/imap: set conn to Err if watch returns Err --- melib/src/backends/imap.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index f01abab9..ecc75796 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -452,15 +452,29 @@ impl MailBackend for ImapType { }; Ok(Box::pin(async move { debug!(has_idle); + let main_conn2 = main_conn.clone(); let kit = ImapWatchKit { conn, main_conn, uid_store, }; - if has_idle { - idle(kit).await?; + if let Err(err) = if has_idle { + idle(kit).await } else { - poll_with_examine(kit).await?; + poll_with_examine(kit).await + } { + let mut main_conn = timeout(Duration::from_secs(3), main_conn2.lock()).await?; + if err.kind.is_network() { + main_conn.uid_store.is_online.lock().unwrap().1 = Err(err.clone()); + } + debug!("failure: {}", err.to_string()); + let account_hash = main_conn.uid_store.account_hash; + main_conn.add_refresh_event(RefreshEvent { + account_hash, + mailbox_hash: 0, + kind: RefreshEventKind::Failure(err.clone()), + }); + return Err(err); } debug!("watch future returning"); Ok(())