Move Chat from MimeFactory to Loaded::Message

This commit is contained in:
Alexander Krotov
2020-01-08 19:53:20 +03:00
parent 9738515129
commit d6cc0694f0

View File

@@ -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;