mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 17:36:29 +03:00
introduce MailinglistType for more exhaustive checking
This commit is contained in:
@@ -86,6 +86,23 @@ pub(crate) enum AvatarAction {
|
|||||||
Change(String),
|
Change(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub(crate) enum MailinglistType {
|
||||||
|
/// The message belongs to a mailing list and has a `ListId:`-header
|
||||||
|
/// that should be used to get a unique id.
|
||||||
|
ListIdBased,
|
||||||
|
|
||||||
|
/// The message belongs to a mailing list, but there is no `ListId:`-header;
|
||||||
|
/// `Sender:`-header should be used to get a unique id.
|
||||||
|
/// This method is used by implementations as Majordomo.
|
||||||
|
/// Note, that the `Sender:` header alone is not sufficient to detect these lists,
|
||||||
|
/// `get_mailinglist_type()` check additional conditions therefore.
|
||||||
|
SenderBased,
|
||||||
|
|
||||||
|
/// The message does not belong to a mailing list.
|
||||||
|
None,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, ToSql, FromSql)]
|
#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive, ToSql, FromSql)]
|
||||||
#[repr(i32)]
|
#[repr(i32)]
|
||||||
pub enum SystemMessage {
|
pub enum SystemMessage {
|
||||||
@@ -901,15 +918,25 @@ impl MimeMessage {
|
|||||||
self.parts.push(part);
|
self.parts.push(part);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_mailinglist_message(&self) -> bool {
|
pub(crate) fn get_mailinglist_type(&self) -> MailinglistType {
|
||||||
if self.get(HeaderDef::ListId).is_some() {
|
if self.get(HeaderDef::ListId).is_some() {
|
||||||
return true;
|
return MailinglistType::ListIdBased;
|
||||||
|
} else if self.get(HeaderDef::Sender).is_some() {
|
||||||
|
// the `Sender:`-header alone is no indicator for mailing list
|
||||||
|
// as also used for bot-impersonation via `set_override_sender_name()`
|
||||||
|
if let Some(precedence) = self.get(HeaderDef::Precedence) {
|
||||||
|
if precedence == "list" || precedence == "bulk" {
|
||||||
|
return MailinglistType::SenderBased;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
MailinglistType::None
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(precedence) = self.get(HeaderDef::Precedence) {
|
pub(crate) fn is_mailinglist_message(&self) -> bool {
|
||||||
precedence == "list" || precedence == "bulk"
|
match self.get_mailinglist_type() {
|
||||||
} else {
|
MailinglistType::ListIdBased | MailinglistType::SenderBased => true,
|
||||||
false
|
MailinglistType::None => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user