mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 12:56:30 +03:00
Move Chat from MimeFactory to Loaded::Message
This commit is contained in:
@@ -18,9 +18,9 @@ use crate::param::*;
|
|||||||
use crate::peerstate::{Peerstate, PeerstateVerifiedStatus};
|
use crate::peerstate::{Peerstate, PeerstateVerifiedStatus};
|
||||||
use crate::stock::StockMessage;
|
use crate::stock::StockMessage;
|
||||||
|
|
||||||
#[derive(Clone, Copy, Eq, PartialEq)]
|
#[derive(Clone)]
|
||||||
pub enum Loaded {
|
pub enum Loaded {
|
||||||
Message,
|
Message { chat: Chat },
|
||||||
MDN,
|
MDN,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +35,6 @@ pub struct MimeFactory<'a, 'b> {
|
|||||||
timestamp: i64,
|
timestamp: i64,
|
||||||
loaded: Loaded,
|
loaded: Loaded,
|
||||||
msg: &'b Message,
|
msg: &'b Message,
|
||||||
chat: Option<Chat>,
|
|
||||||
increation: bool,
|
increation: bool,
|
||||||
in_reply_to: String,
|
in_reply_to: String,
|
||||||
references: String,
|
references: String,
|
||||||
@@ -75,7 +74,6 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
.get_config(Config::ConfiguredAddr)
|
.get_config(Config::ConfiguredAddr)
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let from_displayname = context.get_config(Config::Displayname).unwrap_or_default();
|
let from_displayname = context.get_config(Config::Displayname).unwrap_or_default();
|
||||||
|
|
||||||
let mut recipients_names = Vec::with_capacity(5);
|
let mut recipients_names = Vec::with_capacity(5);
|
||||||
let mut recipients_addr = Vec::with_capacity(5);
|
let mut recipients_addr = Vec::with_capacity(5);
|
||||||
let mut req_mdn = false;
|
let mut req_mdn = false;
|
||||||
@@ -156,9 +154,8 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
recipients_names,
|
recipients_names,
|
||||||
recipients_addr,
|
recipients_addr,
|
||||||
timestamp: msg.timestamp_sort,
|
timestamp: msg.timestamp_sort,
|
||||||
loaded: Loaded::Message,
|
loaded: Loaded::Message { chat },
|
||||||
msg,
|
msg,
|
||||||
chat: Some(chat),
|
|
||||||
increation: msg.is_increation(),
|
increation: msg.is_increation(),
|
||||||
in_reply_to,
|
in_reply_to,
|
||||||
references,
|
references,
|
||||||
@@ -167,7 +164,6 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
attach_selfavatar: add_selfavatar,
|
attach_selfavatar: add_selfavatar,
|
||||||
context,
|
context,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(factory)
|
Ok(factory)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +196,6 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
timestamp: dc_create_smeared_timestamp(context),
|
timestamp: dc_create_smeared_timestamp(context),
|
||||||
loaded: Loaded::MDN,
|
loaded: Loaded::MDN,
|
||||||
msg,
|
msg,
|
||||||
chat: None,
|
|
||||||
increation: false,
|
increation: false,
|
||||||
in_reply_to: String::default(),
|
in_reply_to: String::default(),
|
||||||
references: String::default(),
|
references: String::default(),
|
||||||
@@ -230,9 +225,9 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn is_e2ee_guranteed(&self) -> bool {
|
fn is_e2ee_guranteed(&self) -> bool {
|
||||||
match self.loaded {
|
match &self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { chat } => {
|
||||||
if self.chat.as_ref().unwrap().typ == Chattype::VerifiedGroup {
|
if chat.typ == Chattype::VerifiedGroup {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,9 +253,8 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn min_verified(&self) -> PeerstateVerifiedStatus {
|
fn min_verified(&self) -> PeerstateVerifiedStatus {
|
||||||
match self.loaded {
|
match &self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { chat } => {
|
||||||
let chat = self.chat.as_ref().unwrap();
|
|
||||||
if chat.typ == Chattype::VerifiedGroup {
|
if chat.typ == Chattype::VerifiedGroup {
|
||||||
PeerstateVerifiedStatus::BidirectVerified
|
PeerstateVerifiedStatus::BidirectVerified
|
||||||
} else {
|
} else {
|
||||||
@@ -272,9 +266,8 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn should_force_plaintext(&self) -> i32 {
|
fn should_force_plaintext(&self) -> i32 {
|
||||||
match self.loaded {
|
match &self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { chat } => {
|
||||||
let chat = self.chat.as_ref().unwrap();
|
|
||||||
if chat.typ == Chattype::VerifiedGroup {
|
if chat.typ == Chattype::VerifiedGroup {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
@@ -289,9 +282,8 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn should_do_gossip(&self) -> bool {
|
fn should_do_gossip(&self) -> bool {
|
||||||
match self.loaded {
|
match &self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { chat } => {
|
||||||
let chat = self.chat.as_ref().unwrap();
|
|
||||||
// beside key- and member-changes, force re-gossip every 48 hours
|
// beside key- and member-changes, force re-gossip every 48 hours
|
||||||
let gossiped_timestamp = chat.get_gossiped_timestamp(self.context);
|
let gossiped_timestamp = chat.get_gossiped_timestamp(self.context);
|
||||||
if gossiped_timestamp == 0 || (gossiped_timestamp + (2 * 24 * 60 * 60)) > time() {
|
if gossiped_timestamp == 0 || (gossiped_timestamp + (2 * 24 * 60 * 60)) > time() {
|
||||||
@@ -305,9 +297,8 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn grpimage(&self) -> Option<String> {
|
fn grpimage(&self) -> Option<String> {
|
||||||
match self.loaded {
|
match &self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { chat } => {
|
||||||
let chat = self.chat.as_ref().unwrap();
|
|
||||||
let cmd = self.msg.param.get_cmd();
|
let cmd = self.msg.param.get_cmd();
|
||||||
|
|
||||||
match cmd {
|
match cmd {
|
||||||
@@ -337,9 +328,7 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
|
|
||||||
fn subject_str(&self) -> String {
|
fn subject_str(&self) -> String {
|
||||||
match self.loaded {
|
match self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { ref chat } => {
|
||||||
match self.chat {
|
|
||||||
Some(ref chat) => {
|
|
||||||
let raw = message::get_summarytext_by_raw(
|
let raw = message::get_summarytext_by_raw(
|
||||||
self.msg.viewtype,
|
self.msg.viewtype,
|
||||||
self.msg.text.as_ref(),
|
self.msg.text.as_ref(),
|
||||||
@@ -362,16 +351,12 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
self.context
|
self.context
|
||||||
.stock_str(StockMessage::AcSetupMsgSubject)
|
.stock_str(StockMessage::AcSetupMsgSubject)
|
||||||
.into_owned()
|
.into_owned()
|
||||||
} else if chat.typ == Chattype::Group || chat.typ == Chattype::VerifiedGroup
|
} else if chat.typ == Chattype::Group || chat.typ == Chattype::VerifiedGroup {
|
||||||
{
|
|
||||||
format!("Chat: {}: {}{}", chat.name, fwd, raw_subject)
|
format!("Chat: {}: {}{}", chat.name, fwd, raw_subject)
|
||||||
} else {
|
} else {
|
||||||
format!("Chat: {}{}", fwd, raw_subject)
|
format!("Chat: {}{}", fwd, raw_subject)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => String::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loaded::MDN => {
|
Loaded::MDN => {
|
||||||
let e = self.context.stock_str(StockMessage::ReadRcpt);
|
let e = self.context.stock_str(StockMessage::ReadRcpt);
|
||||||
format!("Chat: {}", e)
|
format!("Chat: {}", e)
|
||||||
@@ -460,7 +445,7 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
let subject = encode_words(&subject_str);
|
let subject = encode_words(&subject_str);
|
||||||
|
|
||||||
let mut message = match self.loaded {
|
let mut message = match self.loaded {
|
||||||
Loaded::Message => {
|
Loaded::Message { .. } => {
|
||||||
self.render_message(&mut protected_headers, &mut unprotected_headers, &grpimage)?
|
self.render_message(&mut protected_headers, &mut unprotected_headers, &grpimage)?
|
||||||
}
|
}
|
||||||
Loaded::MDN => self.render_mdn()?,
|
Loaded::MDN => self.render_mdn()?,
|
||||||
@@ -480,7 +465,7 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
let is_encrypted = should_encrypt && force_plaintext == 0;
|
let is_encrypted = should_encrypt && force_plaintext == 0;
|
||||||
|
|
||||||
let rfc724_mid = match self.loaded {
|
let rfc724_mid = match self.loaded {
|
||||||
Loaded::Message => self.msg.rfc724_mid.clone(),
|
Loaded::Message { .. } => self.msg.rfc724_mid.clone(),
|
||||||
Loaded::MDN => dc_create_outgoing_rfc724_mid(None, &self.from_addr),
|
Loaded::MDN => dc_create_outgoing_rfc724_mid(None, &self.from_addr),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -605,7 +590,7 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
is_gossiped,
|
is_gossiped,
|
||||||
last_added_location_id,
|
last_added_location_id,
|
||||||
foreign_id: match loaded {
|
foreign_id: match loaded {
|
||||||
Loaded::Message => Some(msg.id),
|
Loaded::Message { .. } => Some(msg.id),
|
||||||
Loaded::MDN => None,
|
Loaded::MDN => None,
|
||||||
},
|
},
|
||||||
recipients: recipients_addr,
|
recipients: recipients_addr,
|
||||||
@@ -621,7 +606,10 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
|
|||||||
grpimage: &Option<String>,
|
grpimage: &Option<String>,
|
||||||
) -> Result<PartBuilder, Error> {
|
) -> Result<PartBuilder, Error> {
|
||||||
let context = self.context;
|
let context = self.context;
|
||||||
let chat = self.chat.as_ref().unwrap();
|
let chat = match &self.loaded {
|
||||||
|
Loaded::Message { chat } => chat,
|
||||||
|
Loaded::MDN => bail!("Attempt to render MDN as a message"),
|
||||||
|
};
|
||||||
let command = self.msg.param.get_cmd();
|
let command = self.msg.param.get_cmd();
|
||||||
let mut placeholdertext = None;
|
let mut placeholdertext = None;
|
||||||
let mut meta_part = None;
|
let mut meta_part = None;
|
||||||
|
|||||||
Reference in New Issue
Block a user