From 7152dcdb3a0308c34e6c44a1f89cbdd3ed169d29 Mon Sep 17 00:00:00 2001 From: mdecimus Date: Wed, 3 Jan 2024 09:42:55 +0100 Subject: [PATCH] IMAP SEARCH by sequence number fix --- CHANGELOG.md | 9 +++++++++ crates/imap/src/op/search.rs | 9 ++------- crates/imap/src/op/thread.rs | 4 +--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ff03501..82e9db41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [0.5.2] - 2024-01-xx + +## Added + +### Changed + +### Fixed +- IMAP command `SEARCH ` is using UIDs rather than sequence numbers. + ## [0.5.1] - 2024-01-02 ## Added diff --git a/crates/imap/src/op/search.rs b/crates/imap/src/op/search.rs index 540ec3da..e2948812 100644 --- a/crates/imap/src/op/search.rs +++ b/crates/imap/src/op/search.rs @@ -125,7 +125,7 @@ impl SessionData { ) -> Result { // Run query let (result_set, include_highest_modseq) = self - .query(arguments.filter, &mailbox, &prev_saved_search, is_uid) + .query(arguments.filter, &mailbox, &prev_saved_search) .await?; // Obtain modseq @@ -250,7 +250,6 @@ impl SessionData { imap_filter: Vec, mailbox: &SelectedMailbox, prev_saved_search: &Option>>>, - is_uid: bool, ) -> Result<(ResultSet, bool), StatusResponse> { // Obtain message ids let mut filters = Vec::with_capacity(imap_filter.len() + 1); @@ -431,11 +430,7 @@ impl SessionData { return Err(StatusResponse::no("No saved search found.")); } } else { - for id in mailbox - .sequence_to_ids(&sequence, is_uid || uid_filter) - .await? - .keys() - { + for id in mailbox.sequence_to_ids(&sequence, uid_filter).await?.keys() { set.insert(*id); } } diff --git a/crates/imap/src/op/thread.rs b/crates/imap/src/op/thread.rs index b31138d8..6dbf026e 100644 --- a/crates/imap/src/op/thread.rs +++ b/crates/imap/src/op/thread.rs @@ -75,9 +75,7 @@ impl SessionData { is_uid: bool, ) -> Result { // Run query - let (result_set, _) = self - .query(arguments.filter, &mailbox, &None, is_uid) - .await?; + let (result_set, _) = self.query(arguments.filter, &mailbox, &None).await?; // Synchronize mailbox if !result_set.results.is_empty() {