From a93d32e9f2f2889733994826d1986267fd3aacb8 Mon Sep 17 00:00:00 2001 From: avdb13 Date: Sun, 20 Apr 2025 08:06:35 +0000 Subject: [PATCH] do not ignore reason for leaving remote rooms --- src/api/client_server/membership.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index 7d6c9cdb..d427906b 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -1556,7 +1556,7 @@ pub(crate) async fn leave_room( ) .await?; } else { - if let Err(error) = remote_leave_room(user_id, room_id).await { + if let Err(error) = remote_leave_room(user_id, room_id, reason).await { warn!(%error, "Failed to leave room remotely"); // Don't tell the client about this error } @@ -1585,7 +1585,11 @@ pub(crate) async fn leave_room( } #[allow(clippy::too_many_lines)] -async fn remote_leave_room(user_id: &UserId, room_id: &RoomId) -> Result<()> { +async fn remote_leave_room( + user_id: &UserId, + room_id: &RoomId, + reason: Option, +) -> Result<()> { let mut make_leave_response_and_server = Err(Error::BadServerResponse( "No server available to assist in leaving.", )); @@ -1651,6 +1655,17 @@ async fn remote_leave_room(user_id: &UserId, room_id: &RoomId) -> Result<()> { ) })?; + if let Some(reason) = reason { + if let Some(CanonicalJsonValue::Object(content)) = + leave_event_stub.get_mut("content") + { + content.insert( + "reason".to_owned(), + CanonicalJsonValue::String(reason), + ); + } + } + // TODO: Is origin needed? leave_event_stub.insert( "origin".to_owned(),