remove subject attribute

This commit is contained in:
holger krekel
2019-12-07 22:59:23 +01:00
parent 61f8d6f171
commit 099cc9f727
2 changed files with 20 additions and 21 deletions

View File

@@ -604,8 +604,9 @@ fn add_parts(
bytes, hidden, mime_headers, mime_in_reply_to, mime_references) \ bytes, hidden, mime_headers, mime_in_reply_to, mime_references) \
VALUES (?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?);", VALUES (?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?);",
|mut stmt, conn| { |mut stmt, conn| {
for i in 0..icnt { let subject = mime_parser.get_subject().unwrap_or_default();
let part = &mut mime_parser.parts[i];
for part in mime_parser.parts.iter_mut() {
if part.is_meta { if part.is_meta {
continue; continue;
} }
@@ -622,11 +623,6 @@ fn add_parts(
if part.typ == Viewtype::Text { if part.typ == Viewtype::Text {
let msg_raw = part.msg_raw.as_ref().cloned().unwrap_or_default(); let msg_raw = part.msg_raw.as_ref().cloned().unwrap_or_default();
let subject = mime_parser
.subject
.as_ref()
.map(|s| s.to_string())
.unwrap_or_else(|| "".into());
txt_raw = Some(format!("{}\n\n{}", subject, msg_raw)); txt_raw = Some(format!("{}\n\n{}", subject, msg_raw));
} }
if mime_parser.is_system_message != SystemMessage::Unknown { if mime_parser.is_system_message != SystemMessage::Unknown {
@@ -1223,11 +1219,9 @@ fn create_or_lookup_adhoc_group(
return Ok((0, Blocked::Not)); return Ok((0, Blocked::Not));
} }
// use subject as initial chat name // use subject as initial chat name
let grpname = if let Some(subject) = mime_parser.subject.as_ref().filter(|s| !s.is_empty()) { let grpname = mime_parser.get_subject().unwrap_or_else(|| {
subject.to_string()
} else {
context.stock_string_repl_int(StockMessage::Member, member_ids.len() as i32) context.stock_string_repl_int(StockMessage::Member, member_ids.len() as i32)
}; });
// create group record // create group record
let new_chat_id = create_group_record( let new_chat_id = create_group_record(

View File

@@ -29,7 +29,6 @@ pub struct MimeParser<'a> {
pub context: &'a Context, pub context: &'a Context,
pub parts: Vec<Part>, pub parts: Vec<Part>,
pub header: HashMap<String, String>, pub header: HashMap<String, String>,
pub subject: Option<String>,
pub decrypting_failed: bool, pub decrypting_failed: bool,
pub encrypted: bool, pub encrypted: bool,
pub signatures: HashSet<String>, pub signatures: HashSet<String>,
@@ -73,7 +72,6 @@ impl<'a> MimeParser<'a> {
let mut parser = MimeParser { let mut parser = MimeParser {
parts: Vec::new(), parts: Vec::new(),
header: Default::default(), header: Default::default(),
subject: None,
decrypting_failed: false, decrypting_failed: false,
encrypted: false, encrypted: false,
signatures: Default::default(), signatures: Default::default(),
@@ -147,10 +145,6 @@ impl<'a> MimeParser<'a> {
} }
fn parse_headers(&mut self) -> Result<()> { fn parse_headers(&mut self) -> Result<()> {
if let Some(field) = self.lookup_field("Subject") {
self.subject = Some(field.clone());
}
if self.lookup_field("Autocrypt-Setup-Message").is_some() { if self.lookup_field("Autocrypt-Setup-Message").is_some() {
let has_setup_file = self.parts.iter().any(|p| { let has_setup_file = self.parts.iter().any(|p| {
p.mimetype.is_some() && p.mimetype.as_ref().unwrap().as_ref() == MIME_AC_SETUP_FILE p.mimetype.is_some() && p.mimetype.as_ref().unwrap().as_ref() == MIME_AC_SETUP_FILE
@@ -225,7 +219,7 @@ impl<'a> MimeParser<'a> {
std::mem::replace(&mut self.parts[0], filepart); std::mem::replace(&mut self.parts[0], filepart);
} }
} }
if let Some(ref subject) = self.subject { if let Some(ref subject) = self.get_subject() {
let mut prepend_subject = 1i32; let mut prepend_subject = 1i32;
if !self.decrypting_failed { if !self.decrypting_failed {
let colon = subject.find(':'); let colon = subject.find(':');
@@ -316,7 +310,7 @@ impl<'a> MimeParser<'a> {
let mut part = Part::default(); let mut part = Part::default();
part.typ = Viewtype::Text; part.typ = Viewtype::Text;
if let Some(ref subject) = self.subject { if let Some(ref subject) = self.get_subject() {
if !self.has_chat_version() { if !self.has_chat_version() {
part.msg = subject.to_string(); part.msg = subject.to_string();
} }
@@ -340,6 +334,17 @@ impl<'a> MimeParser<'a> {
self.header.contains_key("chat-version") self.header.contains_key("chat-version")
} }
pub(crate) fn get_subject(&self) -> Option<String> {
if let Some(s) = self.header.get("subject") {
if s.is_empty() {
return None;
}
Some(s.to_string())
} else {
None
}
}
pub fn lookup_field(&self, field_name: &str) -> Option<&String> { pub fn lookup_field(&self, field_name: &str) -> Option<&String> {
self.header.get(&field_name.to_lowercase()) self.header.get(&field_name.to_lowercase())
} }
@@ -1016,7 +1021,7 @@ mod tests {
let raw = include_bytes!("../test-data/message/issue_523.txt"); let raw = include_bytes!("../test-data/message/issue_523.txt");
let mimeparser = MimeParser::from_bytes(&context.ctx, &raw[..]).unwrap(); let mimeparser = MimeParser::from_bytes(&context.ctx, &raw[..]).unwrap();
assert_eq!(mimeparser.subject, None); assert_eq!(mimeparser.get_subject(), None);
assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts.len(), 1);
} }
@@ -1121,7 +1126,7 @@ mod tests {
\x00"; \x00";
let mimeparser = MimeParser::from_bytes(&context.ctx, &raw[..]).unwrap(); let mimeparser = MimeParser::from_bytes(&context.ctx, &raw[..]).unwrap();
assert_eq!(mimeparser.subject, Some("inner-subject".into())); assert_eq!(mimeparser.get_subject(), Some("inner-subject".into()));
let of = mimeparser.lookup_field("X-Special-A").unwrap(); let of = mimeparser.lookup_field("X-Special-A").unwrap();
assert_eq!(of, "special-a"); assert_eq!(of, "special-a");