Add Event::ChatAutodeleteTimerModified

This commit is contained in:
Alexander Krotov
2020-01-04 20:41:48 +01:00
parent 0189644f08
commit f5ee9c530d
7 changed files with 69 additions and 1 deletions

View File

@@ -201,6 +201,31 @@ pub fn dc_receive_imf(
};
}
if let Some(value) = mime_parser.get(HeaderDef::AutodeleteTimer) {
let timer = match value.parse::<u32>() {
Ok(timer) => timer,
Err(err) => {
warn!(
context,
"can't parse autodelete timer \"{}\": {}", value, err
);
0
}
};
match chat::set_autodelete_timer(context, chat_id, timer) {
Ok(()) => {
context.call_cb(Event::ChatAutodeleteTimerModified { chat_id, timer });
}
Err(err) => {
warn!(
context,
"failed to modify timer for chat {}: {}", chat_id, err
);
}
}
}
// Get user-configured server deletion
let delete_server_after = context.get_config_delete_server_after();
@@ -221,6 +246,19 @@ pub fn dc_receive_imf(
}
}
// if we delete we don't need to try moving messages
if needs_delete_job && !created_db_entries.is_empty() {
job_add(
context,
Action::DeleteMsgOnImap,
created_db_entries[0].1.to_u32() as i32,
Params::new(),
0,
);
} else {
context.do_heuristics_moves(server_folder.as_ref(), insert_msg_id);
}
info!(
context,
"received message {} has Message-Id: {}", server_uid, rfc724_mid

View File

@@ -136,9 +136,16 @@ pub enum Event {
/// Or the verify state of a chat has changed.
/// See dc_set_chat_name(), dc_set_chat_profile_image(), dc_add_contact_to_chat()
/// and dc_remove_contact_from_chat().
///
/// This event does not include autodelete timer modification, which
/// is a separate event.
#[strum(props(id = "2020"))]
ChatModified(ChatId),
/// Chat autodelete timer changed.
#[strum(props(id = "2021"))]
ChatAutodeleteTimerModified { chat_id: ChatId, timer: u32 },
/// Contact(s) created, renamed, blocked or deleted.
///
/// @param data1 (int) If set, this is the contact_id of an added contact that should be selected.

View File

@@ -41,6 +41,7 @@ pub enum HeaderDef {
SecureJoinFingerprint,
SecureJoinInvitenumber,
SecureJoinAuth,
AutodeleteTimer,
_TestHeader,
}

View File

@@ -2,7 +2,7 @@ use chrono::TimeZone;
use lettre_email::{mime, Address, Header, MimeMultipartType, PartBuilder};
use crate::blob::BlobObject;
use crate::chat::{self, Chat};
use crate::chat::{self, get_autodelete_timer, Chat};
use crate::config::Config;
use crate::constants::*;
use crate::contact::*;
@@ -453,6 +453,14 @@ impl<'a, 'b> MimeFactory<'a, 'b> {
Loaded::MDN { .. } => dc_create_outgoing_rfc724_mid(None, &self.from_addr),
};
let autodelete_timer = get_autodelete_timer(self.context, self.msg.chat_id);
if autodelete_timer > 0 {
protected_headers.push(Header::new(
"Autodelete-Timer".to_string(),
autodelete_timer.to_string(),
));
}
// we could also store the message-id in the protected headers
// which would probably help to survive providers like
// Outlook.com or hotmail which mangle the Message-ID.