diff --git a/src/api/client/directory.rs b/src/api/client/directory.rs index aee4341f..9ce4ffd7 100644 --- a/src/api/client/directory.rs +++ b/src/api/client/directory.rs @@ -11,7 +11,6 @@ use ruma::{ events::{ room::{ avatar::RoomAvatarEventContent, - canonical_alias::RoomCanonicalAliasEventContent, create::RoomCreateEventContent, join_rules::{JoinRule, RoomJoinRulesEventContent}, topic::RoomTopicEventContent, @@ -229,12 +228,7 @@ pub(crate) async fn get_public_rooms_filtered_helper( canonical_alias: services() .rooms .state_accessor - .room_state_get(&room_id, &StateEventType::RoomCanonicalAlias, "")? - .map_or(Ok(None), |s| { - serde_json::from_str(s.content.get()) - .map(|c: RoomCanonicalAliasEventContent| c.alias) - .map_err(|_| Error::bad_database("Invalid canonical alias event in database.")) - })?, + .get_canonical_alias(&room_id)?, name: services().rooms.state_accessor.get_name(&room_id)?, num_joined_members: services() .rooms diff --git a/src/service/rooms/spaces/mod.rs b/src/service/rooms/spaces/mod.rs index 9a5dc9d0..c96ab7a0 100644 --- a/src/service/rooms/spaces/mod.rs +++ b/src/service/rooms/spaces/mod.rs @@ -15,7 +15,6 @@ use ruma::{ events::{ room::{ avatar::RoomAvatarEventContent, - canonical_alias::RoomCanonicalAliasEventContent, create::RoomCreateEventContent, join_rules::{AllowRule, JoinRule, RoomJoinRulesEventContent, RoomMembership}, topic::RoomTopicEventContent, @@ -558,12 +557,7 @@ impl Service { canonical_alias: services() .rooms .state_accessor - .room_state_get(room_id, &StateEventType::RoomCanonicalAlias, "")? - .map_or(Ok(None), |s| { - serde_json::from_str(s.content.get()) - .map(|c: RoomCanonicalAliasEventContent| c.alias) - .map_err(|_| Error::bad_database("Invalid canonical alias event in database.")) - })?, + .get_canonical_alias(room_id)?, name: services().rooms.state_accessor.get_name(room_id)?, num_joined_members: services() .rooms diff --git a/src/service/rooms/state_accessor/mod.rs b/src/service/rooms/state_accessor/mod.rs index 32ed66ee..62c8c224 100644 --- a/src/service/rooms/state_accessor/mod.rs +++ b/src/service/rooms/state_accessor/mod.rs @@ -10,6 +10,7 @@ use ruma::{ events::{ room::{ avatar::RoomAvatarEventContent, + canonical_alias::RoomCanonicalAliasEventContent, guest_access::{GuestAccess, RoomGuestAccessEventContent}, history_visibility::{HistoryVisibility, RoomHistoryVisibilityEventContent}, member::{MembershipState, RoomMemberEventContent}, @@ -17,7 +18,7 @@ use ruma::{ }, StateEventType, }, - EventId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId, + EventId, OwnedRoomAliasId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId, }; use serde_json::value::to_raw_value; use tokio::sync::MutexGuard; @@ -330,4 +331,14 @@ impl Service { .map_err(|_| Error::bad_database("Invalid room guest access event in database.")) }) } + + /// Gets the primary alias from canonical alias event + pub fn get_canonical_alias(&self, room_id: &RoomId) -> Result, Error> { + self.room_state_get(room_id, &StateEventType::RoomCanonicalAlias, "")? + .map_or(Ok(None), |s| { + serde_json::from_str(s.content.get()) + .map(|c: RoomCanonicalAliasEventContent| c.alias) + .map_err(|_| Error::bad_database("Invalid canonical alias event in database.")) + }) + } }