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.
This commit is contained in:
Alexander Krotov
2020-01-07 16:02:36 +03:00
parent 010cf7140f
commit 49e821d029

View File

@@ -201,42 +201,6 @@ pub fn dc_receive_imf(
};
}
let timer = if let Some(value) = mime_parser.get(HeaderDef::AutodeleteTimer) {
match value.parse::<u32>() {
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::<u32>() {
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)?;