From cff9195d6e77fb2f18a8d8d65150b2081305cc5c Mon Sep 17 00:00:00 2001 From: pep Date: Tue, 27 Jan 2026 21:50:49 +0100 Subject: [PATCH] xmpp: Only send RoomSubject with empty body Signed-off-by: pep --- xmpp/ChangeLog | 1 + xmpp/src/message/receive/group_chat.rs | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/xmpp/ChangeLog b/xmpp/ChangeLog index d7942669..03a104a3 100644 --- a/xmpp/ChangeLog +++ b/xmpp/ChangeLog @@ -30,6 +30,7 @@ XXXX-YY-ZZ [ RELEASER ] resyncs. Adds a parameter to `muc::room::JoinRoomSettings`. * Changed: - Replaced unimplemented! with info! calls. + - Only send `Event::RoomSubject` when there's no body as per 0045. * Added: - Agent::send_room_message takes RoomMessageSettings argument (!483) - Agent::send_raw_message takes RawMessageSettings for any message type (!487) diff --git a/xmpp/src/message/receive/group_chat.rs b/xmpp/src/message/receive/group_chat.rs index a238b274..9ecbbc3b 100644 --- a/xmpp/src/message/receive/group_chat.rs +++ b/xmpp/src/message/receive/group_chat.rs @@ -20,25 +20,25 @@ pub async fn handle_message_group_chat( ) { let config = agent.get_config().await; let langs: Vec<&str> = config.lang.iter().map(String::as_str).collect(); - let mut found_subject = false; - if let Some((_lang, subject)) = message.get_best_subject(langs.clone()) { - events.push(Event::RoomSubject( - from.to_bare(), - from.resource().map(RoomNick::from_resource_ref), - subject.clone(), - time_info.clone(), - )); - found_subject = true; - } - - let Some((_lang, body)) = message.get_best_body_cloned(langs) else { - if !found_subject { + let Some((_lang, body)) = message.get_best_body_cloned(langs.clone()) else { + // 0045 ยง7.2.15 + // a stanza from the room JID (or from the occupant JID of the entity that set + // the subject), with a element but no element + if let Some((_lang, subject)) = message.get_best_subject(langs) { + events.push(Event::RoomSubject( + from.to_bare(), + from.resource().map(RoomNick::from_resource_ref), + subject.clone(), + time_info.clone(), + )); + } else { debug!( "Received groupchat message without body/subject:\n{:#?}", message ); } + return; };