fix: fetch at most 100 existing messages even if EXISTS was not received

According to RFC 3501, EXISTS must always be sent in response to SELECT.
But if the server does not send it for some reason,
async-imap uses the default value, so we will essentially fetch `1:*`
and downloading all messages may take a long time.
This commit is contained in:
link2xt
2023-05-08 10:59:15 +00:00
parent aa212b2b7e
commit d3236e79fd
2 changed files with 3 additions and 2 deletions

View File

@@ -18,6 +18,7 @@
### Fixes
- Make the bots automatically accept group chat contact requests. #4377
- Fetch at most 100 existing messages even if EXISTS was not received. #4383
### Fixes
- jsonrpc: typescript client: fix types of events in event emitter

View File

@@ -1324,8 +1324,8 @@ impl Imap {
// Fetch last DC_FETCH_EXISTING_MSGS_COUNT (100) messages.
// Sequence numbers are sequential. If there are 1000 messages in the inbox,
// we can fetch the sequence numbers 900-1000 and get the last 100 messages.
let first = cmp::max(1, exists - DC_FETCH_EXISTING_MSGS_COUNT);
let set = format!("{first}:*");
let first = cmp::max(1, exists - DC_FETCH_EXISTING_MSGS_COUNT + 1);
let set = format!("{first}:{exists}");
let mut list = session
.fetch(&set, PREFETCH_FLAGS)
.await