xmpp: Allow <confirm/> in message with empty body
skip-changelog: bugfix for previous not yet released change
This commit is contained in:
parent
9d91b02dfd
commit
0cf06f0caf
1 changed files with 14 additions and 4 deletions
|
|
@ -20,14 +20,26 @@ pub async fn handle_message_chat(
|
||||||
) {
|
) {
|
||||||
let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect();
|
let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect();
|
||||||
|
|
||||||
|
let confirm = message.extract_valid_payload::<Confirm>();
|
||||||
|
let is_muc_pm = message.extract_valid_payload::<MucUser>().is_some();
|
||||||
|
|
||||||
|
// First process events that do not require the message body
|
||||||
|
if !is_muc_pm && confirm.is_some() {
|
||||||
|
events.push(Event::AuthConfirm(
|
||||||
|
from.to_bare(),
|
||||||
|
confirm.unwrap(),
|
||||||
|
time_info,
|
||||||
|
));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For other events, a message body is required, so stop here if there isn't one
|
||||||
let Some((_lang, body)) = message.get_best_body_cloned(langs) else {
|
let Some((_lang, body)) = message.get_best_body_cloned(langs) else {
|
||||||
debug!("Received normal/chat message without body:\n{:#?}", message);
|
debug!("Received normal/chat message without body:\n{:#?}", message);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let is_muc_pm = message.extract_valid_payload::<MucUser>().is_some();
|
|
||||||
let correction = message.extract_valid_payload::<Replace>();
|
let correction = message.extract_valid_payload::<Replace>();
|
||||||
let confirm = message.extract_valid_payload::<Confirm>();
|
|
||||||
|
|
||||||
if is_muc_pm {
|
if is_muc_pm {
|
||||||
if from.resource().is_none() {
|
if from.resource().is_none() {
|
||||||
|
|
@ -58,8 +70,6 @@ pub async fn handle_message_chat(
|
||||||
let event = if let Some(correction) = correction {
|
let event = if let Some(correction) = correction {
|
||||||
// TODO: Check that correction is valid (only for last N minutes or last N messages)
|
// TODO: Check that correction is valid (only for last N minutes or last N messages)
|
||||||
Event::ChatMessageCorrection(correction.id, from.to_bare(), body.clone(), time_info)
|
Event::ChatMessageCorrection(correction.id, from.to_bare(), body.clone(), time_info)
|
||||||
} else if let Some(confirm) = confirm {
|
|
||||||
Event::AuthConfirm(from.to_bare(), confirm, time_info)
|
|
||||||
} else {
|
} else {
|
||||||
Event::ChatMessage(message.id.clone(), from.to_bare(), body, time_info)
|
Event::ChatMessage(message.id.clone(), from.to_bare(), body, time_info)
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue