Improve formatting of ephemeral timer change messages

This adds support for more timer values and better fallback for unknown values.

For example, 90 seconds is formatted as "1.5 minutes".
This commit is contained in:
link2xt
2021-01-30 21:20:22 +03:00
committed by link2xt
parent b53415fed5
commit 93bd9422e7
3 changed files with 157 additions and 18 deletions

View File

@@ -212,21 +212,89 @@ pub(crate) async fn stock_ephemeral_timer_changed(
timer: Timer,
from_id: u32,
) -> String {
let stock_message = match timer {
Timer::Disabled => StockMessage::MsgEphemeralTimerDisabled,
match timer {
Timer::Disabled => {
context
.stock_system_msg(
StockMessage::MsgEphemeralTimerDisabled,
timer.to_string(),
"",
from_id,
)
.await
}
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,
0..=59 => {
context
.stock_system_msg(
StockMessage::MsgEphemeralTimerEnabled,
timer.to_string(),
"",
from_id,
)
.await
}
60 => {
context
.stock_system_msg(StockMessage::MsgEphemeralTimerMinute, "", "", from_id)
.await
}
61..=3599 => {
context
.stock_system_msg(
StockMessage::MsgEphemeralTimerMinutes,
format!("{}", (f64::from(duration) / 6.0).round() / 10.0),
"",
from_id,
)
.await
}
3600 => {
context
.stock_system_msg(StockMessage::MsgEphemeralTimerHour, "", "", from_id)
.await
}
3601..=86399 => {
context
.stock_system_msg(
StockMessage::MsgEphemeralTimerHours,
format!("{}", (f64::from(duration) / 360.0).round() / 10.0),
"",
from_id,
)
.await
}
86400 => {
context
.stock_system_msg(StockMessage::MsgEphemeralTimerDay, "", "", from_id)
.await
}
86401..=604_799 => {
context
.stock_system_msg(
StockMessage::MsgEphemeralTimerDays,
format!("{}", (f64::from(duration) / 8640.0).round() / 10.0),
"",
from_id,
)
.await
}
604_800 => {
{ context.stock_system_msg(StockMessage::MsgEphemeralTimerWeek, "", "", from_id) }
.await
}
_ => {
context
.stock_system_msg(
StockMessage::MsgEphemeralTimerWeeks,
format!("{}", (f64::from(duration) / 60480.0).round() / 10.0),
"",
from_id,
)
.await
}
},
};
context
.stock_system_msg(stock_message, timer.to_string(), "", from_id)
.await
}
}
impl MsgId {
@@ -494,10 +562,33 @@ mod tests {
stock_ephemeral_timer_changed(&context, Timer::Enabled { duration: 60 }, 0).await,
"Message deletion timer is set to 1 minute."
);
assert_eq!(
stock_ephemeral_timer_changed(&context, Timer::Enabled { duration: 90 }, 0).await,
"Message deletion timer is set to 1.5 minutes."
);
assert_eq!(
stock_ephemeral_timer_changed(&context, Timer::Enabled { duration: 30 * 60 }, 0).await,
"Message deletion timer is set to 30 minutes."
);
assert_eq!(
stock_ephemeral_timer_changed(&context, Timer::Enabled { duration: 60 * 60 }, 0).await,
"Message deletion timer is set to 1 hour."
);
assert_eq!(
stock_ephemeral_timer_changed(&context, Timer::Enabled { duration: 5400 }, 0).await,
"Message deletion timer is set to 1.5 hours."
);
assert_eq!(
stock_ephemeral_timer_changed(
&context,
Timer::Enabled {
duration: 2 * 60 * 60
},
0
)
.await,
"Message deletion timer is set to 2 hours."
);
assert_eq!(
stock_ephemeral_timer_changed(
&context,
@@ -509,6 +600,17 @@ mod tests {
.await,
"Message deletion timer is set to 1 day."
);
assert_eq!(
stock_ephemeral_timer_changed(
&context,
Timer::Enabled {
duration: 2 * 24 * 60 * 60
},
0
)
.await,
"Message deletion timer is set to 2 days."
);
assert_eq!(
stock_ephemeral_timer_changed(
&context,

View File

@@ -206,9 +206,6 @@ pub enum StockMessage {
#[strum(props(fallback = "Message deletion timer is set to 1 week."))]
MsgEphemeralTimerWeek = 80,
#[strum(props(fallback = "Message deletion timer is set to 4 weeks."))]
MsgEphemeralTimerFourWeeks = 81,
#[strum(props(fallback = "Video chat invitation"))]
VideochatInvitation = 82,
@@ -255,6 +252,18 @@ pub enum StockMessage {
Settings → \"Chats and Media\"\"Delete messages from server\" to continue using it."
))]
DeleteServerTurnedOff = 92,
#[strum(props(fallback = "Message deletion timer is set to %1$s minutes."))]
MsgEphemeralTimerMinutes = 93,
#[strum(props(fallback = "Message deletion timer is set to %1$s hours."))]
MsgEphemeralTimerHours = 94,
#[strum(props(fallback = "Message deletion timer is set to %1$s days."))]
MsgEphemeralTimerDays = 95,
#[strum(props(fallback = "Message deletion timer is set to %1$s weeks."))]
MsgEphemeralTimerWeeks = 96,
}
/*