diff --git a/CHANGELOG.md b/CHANGELOG.md index de37b6566..dfb91790d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Fixes +- do not unnecessarily SELECT folders if there are no operations planned on + them #3333 + + ## 1.83.0 ### Fixes diff --git a/src/imap.rs b/src/imap.rs index b6afedb47..00e4723cc 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -1030,9 +1030,14 @@ impl Imap { .await?; self.prepare(context).await?; - self.select_folder(context, Some(folder)).await?; for (target, rowid_set, uid_set) in UidGrouper::from(rows) { + // Select folder inside the loop to avoid selecting it if there are no pending + // MOVE/DELETE operations. This does not result in multiple SELECT commands + // being sent because `select_folder()` does nothing if the folder is already + // selected. + self.select_folder(context, Some(folder)).await?; + // Empty target folder name means messages should be deleted. if target.is_empty() { self.delete_message_batch(context, &uid_set, rowid_set)