diff options
author | mdecimus <mauro@stalw.art> | 2024-09-20 09:28:04 +0200 |
---|---|---|
committer | mdecimus <mauro@stalw.art> | 2024-09-20 09:28:04 +0200 |
commit | 39d0a168d480eb5b94bd031dd28fc4ba03d9a42e (patch) | |
tree | d1ea81449daaa066566c93c95cea769d9f11b290 /crates/jmap/src | |
parent | 51c8f7b2796892bb3e365e725ccde9ad89b6103f (diff) |
Case insensitive INBOX on fileinto (fixes #763)
Diffstat (limited to 'crates/jmap/src')
-rw-r--r-- | crates/jmap/src/mailbox/get.rs | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/crates/jmap/src/mailbox/get.rs b/crates/jmap/src/mailbox/get.rs index 7b7ac2ed..069b678d 100644 --- a/crates/jmap/src/mailbox/get.rs +++ b/crates/jmap/src/mailbox/get.rs @@ -15,6 +15,8 @@ use trc::AddContext; use crate::{auth::acl::EffectiveAcl, JMAP}; +use super::INBOX_ID; + impl JMAP { pub async fn mailbox_get( &self, @@ -317,16 +319,27 @@ impl JMAP { } let mut filter = Vec::with_capacity(path.len() + 2); + let mut has_inbox = false; filter.push(Filter::Or); - for &item in &path { - filter.push(Filter::eq(Property::Name, item)); + for (pos, item) in path.iter().enumerate() { + if pos == 0 && item.eq_ignore_ascii_case("inbox") { + has_inbox = true; + } else { + filter.push(Filter::eq(Property::Name, *item)); + } } filter.push(Filter::End); - let document_ids = self - .filter(account_id, Collection::Mailbox, filter) - .await? - .results; + let mut document_ids = if filter.len() > 2 { + self.filter(account_id, Collection::Mailbox, filter) + .await? + .results + } else { + RoaringBitmap::new() + }; + if has_inbox { + document_ids.insert(INBOX_ID); + } if exact_match && (document_ids.len() as usize) < path.len() { return Ok(None); } |