summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2020-12-02 14:16:21 +0200
committerManos Pitsidianakis <el13635@mail.ntua.gr>2020-12-02 17:10:43 +0200
commit1408690a9a0d0976c17397be33bd4e886088a914 (patch)
tree6f17f22d5da4e7b449120e32a08ed909dc1c9419
parent76814cea204e13951df708d8990843b74640634c (diff)
melib/imap: don't retry watch conn on non-network error
-rw-r--r--melib/src/backends/imap.rs2
-rw-r--r--melib/src/backends/imap/watch.rs18
2 files changed, 12 insertions, 8 deletions
diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs
index 4988e958..4129bb66 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 c913710c..48a2e80b 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 {