From d24eb9918e3ab0c69af05c8cb92424ecaba903f3 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 11 Jan 2024 17:13:59 +0100 Subject: Enable CONDSTORE on STORE/FETCH modifier --- src/imap/capability.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/imap/capability.rs') diff --git a/src/imap/capability.rs b/src/imap/capability.rs index 53d7b7d..6533ccb 100644 --- a/src/imap/capability.rs +++ b/src/imap/capability.rs @@ -1,9 +1,11 @@ -use imap_codec::imap_types::command::SelectExamineModifier; +use imap_codec::imap_types::command::{FetchModifier, StoreModifier, SelectExamineModifier}; use imap_codec::imap_types::core::NonEmptyVec; use imap_codec::imap_types::extensions::enable::{CapabilityEnable, Utf8Kind}; use imap_codec::imap_types::response::Capability; use std::collections::HashSet; +use crate::imap::attributes::AttributesProxy; + fn capability_unselect() -> Capability<'static> { Capability::try_from("UNSELECT").unwrap() } @@ -91,6 +93,24 @@ impl ClientCapability { self.condstore = self.condstore.enable(); } + pub fn attributes_enable(&mut self, ap: &AttributesProxy) { + if ap.is_enabling_condstore() { + self.enable_condstore() + } + } + + pub fn fetch_modifiers_enable(&mut self, mods: &[FetchModifier]) { + if mods.iter().any(|x| matches!(x, FetchModifier::ChangedSince(..))) { + self.enable_condstore() + } + } + + pub fn store_modifiers_enable(&mut self, mods: &[StoreModifier]) { + if mods.iter().any(|x| matches!(x, StoreModifier::UnchangedSince(..))) { + self.enable_condstore() + } + } + pub fn select_enable(&mut self, mods: &[SelectExamineModifier]) { for m in mods.iter() { match m { -- cgit v1.2.3