Message caching improvements

This commit is contained in:
mdecimus
2025-05-06 16:00:16 +02:00
parent b8329afeba
commit e69b5ec2b7
87 changed files with 2835 additions and 2536 deletions

View File

@@ -34,6 +34,21 @@ pub enum Collection {
None = 13,
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Default)]
#[repr(u8)]
pub enum SyncCollection {
Email = 0,
Thread = 1,
Calendar = 2,
AddressBook = 3,
FileNode = 4,
Identity = 5,
EmailSubmission = 6,
SieveScript = 7,
#[default]
None = 8,
}
impl Collection {
pub fn main_collection(&self) -> Collection {
match self {
@@ -96,6 +111,22 @@ impl From<u8> for Collection {
}
}
impl From<u8> for SyncCollection {
fn from(v: u8) -> Self {
match v {
0 => SyncCollection::Email,
1 => SyncCollection::Thread,
2 => SyncCollection::Calendar,
3 => SyncCollection::AddressBook,
4 => SyncCollection::FileNode,
5 => SyncCollection::Identity,
6 => SyncCollection::EmailSubmission,
7 => SyncCollection::SieveScript,
_ => SyncCollection::None,
}
}
}
impl From<u64> for Collection {
fn from(v: u64) -> Self {
match v {
@@ -123,6 +154,12 @@ impl From<Collection> for u8 {
}
}
impl From<SyncCollection> for u8 {
fn from(v: SyncCollection) -> Self {
v as u8
}
}
impl From<Collection> for u64 {
fn from(collection: Collection) -> u64 {
collection as u64
@@ -171,10 +208,6 @@ impl Collection {
Collection::None => "",
}
}
pub fn as_child_update(&self) -> u8 {
u8::MAX - u8::from(*self)
}
}
impl FromStr for Collection {

View File

@@ -172,25 +172,21 @@ impl TryFrom<&str> for DataType {
}
}
impl TryFrom<ShortId> for DataType {
type Error = ();
fn try_from(value: ShortId) -> Result<Self, Self::Error> {
const MAILBOX_CHANGE: u8 = u8::MAX - 1;
match value.0 {
0 => Ok(DataType::Email),
1 | MAILBOX_CHANGE => Ok(DataType::Mailbox),
2 => Ok(DataType::Thread),
3 => Ok(DataType::Identity),
4 => Ok(DataType::EmailSubmission),
5 => Ok(DataType::SieveScript),
6 => Ok(DataType::PushSubscription),
8 => Ok(DataType::Calendar),
9 => Ok(DataType::CalendarEvent),
10 => Ok(DataType::AddressBook),
11 => Ok(DataType::ContactCard),
12 => Ok(DataType::FileNode),
_ => Err(()),
impl DataType {
pub fn try_from_id(value: ShortId, is_container: bool) -> Option<Self> {
match (value.0, is_container) {
(0, false) => DataType::Email.into(),
(0, true) => DataType::Mailbox.into(),
(1, _) => DataType::Thread.into(),
(2, true) => DataType::Calendar.into(),
(2, false) => DataType::CalendarEvent.into(),
(3, true) => DataType::AddressBook.into(),
(3, false) => DataType::ContactCard.into(),
(4, _) => DataType::FileNode.into(),
(5, _) => DataType::Identity.into(),
(6, _) => DataType::EmailSubmission.into(),
(7, _) => DataType::SieveScript.into(),
_ => None,
}
}
}