Browse Source

melib/imap: check for max uid == 0 when resyncing

tags/alpha-0.6.2
Manos Pitsidianakis 1 month ago
parent
commit
e8f3b6aa24
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS. GPG Key ID: 73627C2F690DF710
2 changed files with 25 additions and 10 deletions
  1. +1
    -1
      melib/src/backends/imap/cache.rs
  2. +24
    -9
      melib/src/backends/imap/cache/sync.rs

+ 1
- 1
melib/src/backends/imap/cache.rs View File

@ -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()

+ 24
- 9
melib/src/backends/imap/cache/sync.rs View File

@ -261,8 +261,12 @@ impl ImapConnection {
.unwrap()
.insert_existing_set(payload.iter().map(|(_, env)| env.hash()).collect::<_>());
// 3. tag2 UID FETCH 1:<lastseenuid> 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:<lastseenuid> 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;

Loading…
Cancel
Save