mirror of
https://github.com/chatmail/core.git
synced 2026-04-17 21:46:35 +03:00
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:
@@ -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)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user