Do not include STATUS in NOOP responses (fixes #234)

This commit is contained in:
Mauro D 2024-02-08 10:16:03 -03:00
parent f54670a6f6
commit d15f598460
3 changed files with 21 additions and 22 deletions

View file

@ -226,9 +226,13 @@ impl<T: SessionStream> SessionData<T> {
..Default::default()
},
);
account
.mailbox_names
.insert(mailbox_path.join("/"), *mailbox_id);
let mut mailbox_name = mailbox_path.join("/");
if mailbox_name.eq_ignore_ascii_case("inbox") && *mailbox_id != INBOX_ID {
// If there is another mailbox called Inbox, renamed it to avoid conflicts
mailbox_name = format!("{mailbox_name} 2");
}
account.mailbox_names.insert(mailbox_name, *mailbox_id);
if has_children && iter_stack.len() < 100 {
iter_stack.push((iter, parent_id, path));
@ -508,7 +512,9 @@ impl<T: SessionStream> SessionData<T> {
.map_or(true, |p| mailbox_name.starts_with(p))
{
for (mailbox_name_, mailbox_id_) in account.mailbox_names.iter() {
if mailbox_name_ == mailbox_name || (is_inbox && *mailbox_id_ == INBOX_ID) {
if (!is_inbox && mailbox_name_ == mailbox_name)
|| (is_inbox && *mailbox_id_ == INBOX_ID)
{
return MailboxId {
account_id: account.account_id,
mailbox_id: *mailbox_id_,

View file

@ -37,7 +37,7 @@ use imap_proto::{
receiver::Request,
Command, ResponseCode, StatusResponse,
};
use jmap::{email::metadata::MessageMetadata, Bincode};
use jmap::email::metadata::MessageMetadata;
use jmap_proto::{
error::method::MethodError,
types::{
@ -48,7 +48,7 @@ use jmap_proto::{
use mail_parser::{Address, GetHeader, HeaderName, Message, PartType};
use store::{
query::log::{Change, Query},
write::{assert::HashedValue, BatchBuilder, F_BITMAP, F_VALUE},
write::{assert::HashedValue, BatchBuilder, Bincode, F_BITMAP, F_VALUE},
};
use utils::listener::SessionStream;

View file

@ -29,22 +29,15 @@ use crate::core::{Session, State};
impl<T: SessionStream> Session<T> {
pub async fn handle_noop(&mut self, request: Request<Command>) -> crate::OpResult {
match &self.state {
State::Authenticated { data, .. } => {
data.write_changes(&None, true, false, self.is_qresync, self.version.is_rev2())
.await;
}
State::Selected { data, mailbox, .. } => {
data.write_changes(
&Some(mailbox.clone()),
true,
true,
self.is_qresync,
self.version.is_rev2(),
)
.await;
}
_ => (),
if let State::Selected { data, mailbox, .. } = &self.state {
data.write_changes(
&Some(mailbox.clone()),
false,
true,
self.is_qresync,
self.version.is_rev2(),
)
.await;
}
self.write_bytes(