From cfd12b9d88028a1e998d81f5a0d5d6887e0a86ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Pie=C5=84kowski?= Date: Tue, 8 Jul 2025 23:04:40 +0000 Subject: [PATCH 1/3] fix: Fallback to user display name, if room name is not set --- src/api/client_server/room.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/api/client_server/room.rs b/src/api/client_server/room.rs index fcd61a54..b1cb0f30 100644 --- a/src/api/client_server/room.rs +++ b/src/api/client_server/room.rs @@ -186,6 +186,7 @@ pub async fn create_room_route( content } }; + let displayname = services().users.displayname(sender_user)?; // Validate creation content let de_result = serde_json::from_str::( @@ -229,7 +230,7 @@ pub async fn create_room_route( event_type: TimelineEventType::RoomMember, content: to_raw_value(&RoomMemberEventContent { membership: MembershipState::Join, - displayname: services().users.displayname(sender_user)?, + displayname: displayname.clone(), avatar_url: services().users.avatar_url(sender_user)?, is_direct: Some(body.is_direct), third_party_invite: None, @@ -424,7 +425,14 @@ pub async fn create_room_route( } // 7. Events implied by name and topic - if let Some(name) = &body.name { + let name = if body.name.is_some() { + &body.name + } else if displayname.is_some() { + &displayname + } else { + &None + }; + if let Some(name) = name { services() .rooms .timeline From 35b5a6174ad606d5eacf0b1f0fff67b9bcf14bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Pie=C5=84kowski?= Date: Thu, 10 Jul 2025 00:26:48 +0000 Subject: [PATCH 2/3] fix: Include m.room.member in invite_room_state --- src/api/client_server/membership.rs | 13 ++++++++++++- src/api/client_server/room.rs | 12 ++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index 78584c22..b3287aca 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -702,7 +702,18 @@ pub(crate) async fn invite_helper( &state_lock, )?; - let invite_room_state = services().rooms.state.stripped_state(&pdu.room_id)?; + let mut invite_room_state = services().rooms.state.stripped_state(&pdu.room_id)?; + invite_room_state.push( + services() + .rooms + .state_accessor + .room_state_get( + &pdu.room_id, + &StateEventType::RoomMember, + sender_user.as_str())? + .expect("sender is already room member") + .to_stripped_state_event()); + let invite_room_state = invite_room_state; drop(state_lock); diff --git a/src/api/client_server/room.rs b/src/api/client_server/room.rs index b1cb0f30..fcd61a54 100644 --- a/src/api/client_server/room.rs +++ b/src/api/client_server/room.rs @@ -186,7 +186,6 @@ pub async fn create_room_route( content } }; - let displayname = services().users.displayname(sender_user)?; // Validate creation content let de_result = serde_json::from_str::( @@ -230,7 +229,7 @@ pub async fn create_room_route( event_type: TimelineEventType::RoomMember, content: to_raw_value(&RoomMemberEventContent { membership: MembershipState::Join, - displayname: displayname.clone(), + displayname: services().users.displayname(sender_user)?, avatar_url: services().users.avatar_url(sender_user)?, is_direct: Some(body.is_direct), third_party_invite: None, @@ -425,14 +424,7 @@ pub async fn create_room_route( } // 7. Events implied by name and topic - let name = if body.name.is_some() { - &body.name - } else if displayname.is_some() { - &displayname - } else { - &None - }; - if let Some(name) = name { + if let Some(name) = &body.name { services() .rooms .timeline From f62efcbcbc188c5ff349f819319cb94036cd6fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Pie=C5=84kowski?= Date: Thu, 10 Jul 2025 11:38:23 +0000 Subject: [PATCH 3/3] fix: Include m.room.member in invite_room_state --- src/api/client_server/membership.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index b3287aca..62985bb7 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -703,17 +703,13 @@ pub(crate) async fn invite_helper( )?; let mut invite_room_state = services().rooms.state.stripped_state(&pdu.room_id)?; - invite_room_state.push( - services() - .rooms - .state_accessor - .room_state_get( - &pdu.room_id, - &StateEventType::RoomMember, - sender_user.as_str())? - .expect("sender is already room member") - .to_stripped_state_event()); - let invite_room_state = invite_room_state; + if let Some(sender) = services().rooms.state_accessor.room_state_get( + &pdu.room_id, + &StateEventType::RoomMember, + sender_user.as_str(), + )? { + invite_room_state.push(sender.to_stripped_state_event()); + } drop(state_lock);