From e1773edf7f9e763e054cd92e24d0a06fe52d15fe Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Mon, 6 Jan 2020 08:03:09 +0100 Subject: [PATCH] Send system message to chat when user changes autodelete timer --- src/chat.rs | 36 +++++++++++++++++++++++++++++++++--- src/dc_receive_imf.rs | 2 +- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/chat.rs b/src/chat.rs index 2a9b5cef5..5d8f88da1 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -2582,10 +2582,15 @@ pub fn get_autodelete_timer(context: &Context, chat_id: ChatId) -> u32 { .unwrap_or_default() } -/// Set autodelete timer value in seconds. +/// Set autodelete timer value without sending a message. /// -/// If timer value is 0, disable autodelete timer. -pub fn set_autodelete_timer(context: &Context, chat_id: ChatId, timer: u32) -> Result<(), Error> { +/// Used when a message arrives indicating that someone else has +/// changed the timer value for a chat. +pub(crate) fn inner_set_autodelete_timer( + context: &Context, + chat_id: ChatId, + timer: u32, +) -> Result<(), Error> { context.sql.execute( "UPDATE chats SET autodelete_timer=? @@ -2595,6 +2600,31 @@ pub fn set_autodelete_timer(context: &Context, chat_id: ChatId, timer: u32) -> R Ok(()) } +/// Set autodelete timer value in seconds. +/// +/// If timer value is 0, disable autodelete timer. +pub fn set_autodelete_timer(context: &Context, chat_id: ChatId, timer: u32) -> Result<(), Error> { + if timer == get_autodelete_timer(context, chat_id) { + return Ok(()); + } + inner_set_autodelete_timer(context, chat_id, timer)?; + let mut msg = Message::new(Viewtype::Text); + msg.text = Some(context.stock_system_msg( + StockMessage::MsgAutodeleteTimerChanged, + timer.to_string(), + "", + 0, + )); + msg.param.set_cmd(SystemMessage::AutodeleteTimerChanged); + if let Err(err) = send_msg(context, chat_id, &mut msg) { + warn!( + context, + "Failed to send a message about autodelete timer change: {:?}", err + ); + } + Ok(()) +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index e3ff4fff6..99d662d5e 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -217,7 +217,7 @@ pub fn dc_receive_imf( }; if chat::get_autodelete_timer(context, chat_id) != timer { - match chat::set_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,