diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index 98ee3e5c4..6a9e81d2f 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -4480,8 +4480,15 @@ void dc_event_unref(dc_event_t* event); #define DC_STR_UNKNOWN_SENDER_FOR_CHAT 72 #define DC_STR_SUBJECT_FOR_NEW_CONTACT 73 #define DC_STR_FAILED_SENDING_TO 74 +#define DC_STR_EPHEMERAL_DISABLED 75 +#define DC_STR_EPHEMERAL_SECONDS 76 +#define DC_STR_EPHEMERAL_MINUTE 77 +#define DC_STR_EPHEMERAL_HOUR 78 +#define DC_STR_EPHEMERAL_DAY 79 +#define DC_STR_EPHEMERAL_WEEK 80 +#define DC_STR_EPHEMERAL_FOUR_WEEKS 81 -#define DC_STR_COUNT 74 +#define DC_STR_COUNT 81 /* * @} diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index f9ce6ffb3..ef3a11d7a 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -10,7 +10,7 @@ use crate::constants::*; use crate::contact::*; use crate::context::Context; use crate::dc_tools::*; -use crate::ephemeral::Timer as EphemeralTimer; +use crate::ephemeral::{stock_ephemeral_timer_changed, Timer as EphemeralTimer}; use crate::error::{bail, ensure, format_err, Result}; use crate::events::Event; use crate::headerdef::HeaderDef; @@ -653,15 +653,12 @@ async fn add_parts( { match (*chat_id).inner_set_ephemeral_timer(context, timer).await { Ok(()) => { - let stock_str = context - .stock_system_msg( - StockMessage::MsgEphemeralTimerChanged, - timer.to_string(), - "", - from_id, - ) - .await; - chat::add_info_msg(context, *chat_id, stock_str).await; + chat::add_info_msg( + context, + *chat_id, + stock_ephemeral_timer_changed(context, timer, from_id).await, + ) + .await; context.emit_event(Event::ChatEphemeralTimerModified { chat_id: *chat_id, timer: timer.to_u32(), diff --git a/src/ephemeral.rs b/src/ephemeral.rs index 2e9d429b4..75d416f6f 100644 --- a/src/ephemeral.rs +++ b/src/ephemeral.rs @@ -188,16 +188,7 @@ impl ChatId { } self.inner_set_ephemeral_timer(context, timer).await?; let mut msg = Message::new(Viewtype::Text); - msg.text = Some( - context - .stock_system_msg( - StockMessage::MsgEphemeralTimerChanged, - timer.to_string(), - "", - DC_CONTACT_ID_SELF, - ) - .await, - ); + msg.text = Some(stock_ephemeral_timer_changed(context, timer, DC_CONTACT_ID_SELF).await); msg.param.set_cmd(SystemMessage::EphemeralTimerChanged); if let Err(err) = send_msg(context, self, &mut msg).await { error!( @@ -209,6 +200,29 @@ impl ChatId { } } +/// Returns a stock message saying that ephemeral timer is changed to `timer` by `from_id`. +pub(crate) async fn stock_ephemeral_timer_changed( + context: &Context, + timer: Timer, + from_id: u32, +) -> String { + let stock_message = match timer { + Timer::Disabled => StockMessage::MsgEphemeralTimerDisabled, + Timer::Enabled { duration } => match duration { + 60 => StockMessage::MsgEphemeralTimerMinute, + 3600 => StockMessage::MsgEphemeralTimerHour, + 86400 => StockMessage::MsgEphemeralTimerDay, + 604_800 => StockMessage::MsgEphemeralTimerWeek, + 2_419_200 => StockMessage::MsgEphemeralTimerFourWeeks, + _ => StockMessage::MsgEphemeralTimerEnabled, + }, + }; + + context + .stock_system_msg(stock_message, timer.to_string(), "", from_id) + .await +} + impl MsgId { /// Returns ephemeral message timer value for the message. pub(crate) async fn ephemeral_timer(self, context: &Context) -> crate::sql::Result { @@ -408,3 +422,73 @@ pub(crate) async fn load_imap_deletion_msgid(context: &Context) -> sql::Result