From cef2260dc7157bad934a3996e29e25db36cd45b3 Mon Sep 17 00:00:00 2001 From: timedout Date: Mon, 25 May 2026 15:38:36 +0100 Subject: [PATCH] feat: Include predecessor and successor information in room list --- src/api/client/admin/site/rooms/list.rs | 12 ++++++++++++ src/ruminuwuity/admin/continuwuity/rooms/list.rs | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/api/client/admin/site/rooms/list.rs b/src/api/client/admin/site/rooms/list.rs index 93a1dcc2b..14e3ca793 100644 --- a/src/api/client/admin/site/rooms/list.rs +++ b/src/api/client/admin/site/rooms/list.rs @@ -11,6 +11,7 @@ use ruma::{ room::{ create::RoomCreateEventContent, encryption::PossiblyRedactedRoomEncryptionEventContent, + tombstone::PossiblyRedactedRoomTombstoneEventContent, }, }, }; @@ -94,6 +95,7 @@ pub(crate) async fn list_rooms_route( canonical_alias_event, join_rules_event, history_visibility_event, + tombstone_event, ) = join!( services.rooms.metadata.is_banned(&room_id), services.rooms.metadata.is_disabled(&room_id), @@ -143,6 +145,14 @@ pub(crate) async fn list_rooms_route( &StateEventType::RoomHistoryVisibility, "" ), + services + .rooms + .state_accessor + .room_state_get_content::( + &room_id, + &StateEventType::RoomTombstone, + "" + ), ); let Ok(create_event) = create_event else { return None; @@ -168,6 +178,8 @@ pub(crate) async fn list_rooms_route( canonical_alias: canonical_alias_event.unwrap_or(None), join_rules: join_rules_event.unwrap_or(None), history_visibility: history_visibility_event.unwrap_or(None), + predecessor: create_content.predecessor.map(|c| c.room_id), + successor: tombstone_event.map_or(None, |c| c.replacement_room), }) }) .collect() diff --git a/src/ruminuwuity/admin/continuwuity/rooms/list.rs b/src/ruminuwuity/admin/continuwuity/rooms/list.rs index 10871d8ab..2c6604c65 100644 --- a/src/ruminuwuity/admin/continuwuity/rooms/list.rs +++ b/src/ruminuwuity/admin/continuwuity/rooms/list.rs @@ -140,6 +140,12 @@ pub mod v1 { /// is present. May be redacted. #[serde(default, skip_serializing_if = "Option::is_none")] pub history_visibility: Option, + /// The ID of the room which replaces this one, if any. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub successor: Option, + /// The ID of the room which preceded this one, if any. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub predecessor: Option, } #[response]