diff --git a/melib/src/backends/imap/cache.rs b/melib/src/backends/imap/cache.rs index ad2b1301..d89512f2 100644 --- a/melib/src/backends/imap/cache.rs +++ b/melib/src/backends/imap/cache.rs @@ -539,7 +539,7 @@ mod sqlite3_m { } } tx.commit()?; - let new_max_uid = self.max_uid(mailbox_hash)?; + let new_max_uid = self.max_uid(mailbox_hash).unwrap_or(0); self.uid_store .max_uids .lock() diff --git a/melib/src/backends/imap/cache/sync.rs b/melib/src/backends/imap/cache/sync.rs index 861f3cb8..60450acc 100644 --- a/melib/src/backends/imap/cache/sync.rs +++ b/melib/src/backends/imap/cache/sync.rs @@ -261,8 +261,12 @@ impl ImapConnection { .unwrap() .insert_existing_set(payload.iter().map(|(_, env)| env.hash()).collect::<_>()); // 3. tag2 UID FETCH 1: FLAGS - self.send_command(format!("UID FETCH 1:{} FLAGS", max_uid).as_bytes()) - .await?; + if max_uid == 0 { + self.send_command("UID FETCH 1:* FLAGS".as_bytes()).await?; + } else { + self.send_command(format!("UID FETCH 1:{} FLAGS", max_uid).as_bytes()) + .await?; + } self.read_response(&mut response, RequiredResponses::FETCH_REQUIRED) .await?; //1) update cached flags for old messages; @@ -539,14 +543,25 @@ impl ImapConnection { .unwrap() .insert_existing_set(payload.iter().map(|(_, env)| env.hash()).collect::<_>()); // 3. tag2 UID FETCH 1: FLAGS - self.send_command( - format!( - "UID FETCH 1:{} FLAGS (CHANGEDSINCE {})", - cached_max_uid, cached_highestmodseq + if cached_max_uid == 0 { + self.send_command( + format!( + "UID FETCH 1:* FLAGS (CHANGEDSINCE {})", + cached_highestmodseq + ) + .as_bytes(), ) - .as_bytes(), - ) - .await?; + .await?; + } else { + self.send_command( + format!( + "UID FETCH 1:{} FLAGS (CHANGEDSINCE {})", + cached_max_uid, cached_highestmodseq + ) + .as_bytes(), + ) + .await?; + } self.read_response(&mut response, RequiredResponses::FETCH_REQUIRED) .await?; //1) update cached flags for old messages;