From 49e821d029ce9a781a6d829986a7f42016e2b8e2 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Tue, 7 Jan 2020 16:02:36 +0300 Subject: [PATCH] Apply autodelete timer changes to the chat before adding messages Timer is started only when the message is read, but we want to be completely sure that correct value is used. This commit also add some comments. --- src/dc_receive_imf.rs | 77 +++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 99d662d5e..1511c51b4 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -201,42 +201,6 @@ pub fn dc_receive_imf( }; } - let timer = if let Some(value) = mime_parser.get(HeaderDef::AutodeleteTimer) { - match value.parse::() { - Ok(timer) => timer, - Err(err) => { - warn!( - context, - "can't parse autodelete timer \"{}\": {}", value, err - ); - 0 - } - } - } else { - 0 - }; - - if chat::get_autodelete_timer(context, chat_id) != timer { - match chat::inner_set_autodelete_timer(context, chat_id, timer) { - Ok(()) => { - let stock_str = context.stock_system_msg( - StockMessage::MsgAutodeleteTimerChanged, - timer.to_string(), - "", - from_id, - ); - chat::add_info_msg(context, chat_id, stock_str); - 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(); @@ -640,6 +604,47 @@ fn add_parts( &mut rcvd_timestamp, ); + // Extract autodelete timer from the message. + let timer = if let Some(value) = mime_parser.get(HeaderDef::AutodeleteTimer) { + match value.parse::() { + Ok(timer) => timer, + Err(err) => { + warn!( + context, + "can't parse autodelete timer \"{}\": {}", value, err + ); + 0 + } + } + } else { + 0 + }; + + // Apply autodelete timer changes to the chat. + if chat::get_autodelete_timer(context, *chat_id) != timer { + match chat::inner_set_autodelete_timer(context, *chat_id, timer) { + Ok(()) => { + let stock_str = context.stock_system_msg( + StockMessage::MsgAutodeleteTimerChanged, + timer.to_string(), + "", + from_id, + ); + chat::add_info_msg(context, *chat_id, stock_str); + context.call_cb(Event::ChatAutodeleteTimerModified { + chat_id: *chat_id, + timer, + }); + } + Err(err) => { + warn!( + context, + "failed to modify timer for chat {}: {}", chat_id, err + ); + } + } + } + // unarchive chat chat_id.unarchive(context)?;