diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index 4988e958b..4129bb668 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -499,6 +499,8 @@ impl MailBackend for ImapType { let mut main_conn_lck = timeout(uid_store.timeout, main_conn.lock()).await?; if err.kind.is_network() { uid_store.is_online.lock().unwrap().1 = Err(err.clone()); + } else { + return Err(err); } debug!("Watch failure: {}", err.to_string()); match timeout(uid_store.timeout, main_conn_lck.connect()) diff --git a/melib/src/backends/imap/watch.rs b/melib/src/backends/imap/watch.rs index c913710c4..48a2e80b5 100644 --- a/melib/src/backends/imap/watch.rs +++ b/melib/src/backends/imap/watch.rs @@ -408,14 +408,16 @@ pub async fn examine_updates( } } if uid_store.keep_offline_cache { - cache_handle - .insert_envelopes(mailbox_hash, &v) - .chain_err_summary(|| { - format!( - "Could not save envelopes in cache for mailbox {}", - mailbox.imap_path() - ) - })?; + if !cache_handle.mailbox_state(mailbox_hash)?.is_none() { + cache_handle + .insert_envelopes(mailbox_hash, &v) + .chain_err_summary(|| { + format!( + "Could not save envelopes in cache for mailbox {}", + mailbox.imap_path() + ) + })?; + } } for FetchResponse { uid, envelope, .. } in v {