IMAP: Map header searches to indexed fields

This commit is contained in:
mdecimus
2026-01-10 09:34:18 -03:00
parent 8b2c1f14a5
commit f4603f8aaf

View File

@@ -468,6 +468,31 @@ impl<T: SessionStream> SessionData<T> {
} }
Filter::Header(header, value) => { Filter::Header(header, value) => {
if let Some(header) = HeaderName::parse(header) { if let Some(header) = HeaderName::parse(header) {
match header {
HeaderName::Subject => {
filters.push(SearchFilter::has_text_detect(
EmailSearchField::Subject,
value,
self.server.core.jmap.default_language,
));
}
header @ (HeaderName::From
| HeaderName::To
| HeaderName::Cc
| HeaderName::Bcc) => {
filters.push(SearchFilter::has_text(
match header {
HeaderName::From => EmailSearchField::From,
HeaderName::To => EmailSearchField::To,
HeaderName::Cc => EmailSearchField::Cc,
HeaderName::Bcc => EmailSearchField::Bcc,
_ => unreachable!(),
},
value,
Language::None,
));
}
header => {
let op = if matches!( let op = if matches!(
header, header,
HeaderName::MessageId HeaderName::MessageId
@@ -491,6 +516,8 @@ impl<T: SessionStream> SessionData<T> {
)); ));
} }
} }
}
}
Filter::Subject(text) => { Filter::Subject(text) => {
filters.push(SearchFilter::has_text_detect( filters.push(SearchFilter::has_text_detect(
EmailSearchField::Subject, EmailSearchField::Subject,