From 88d038ffecc1d341db622ecfd2f66507e2bf736c Mon Sep 17 00:00:00 2001 From: strawberry Date: Sat, 8 Jun 2024 20:52:41 -0400 Subject: [PATCH] refactor getting room's canonical alias into 1 function Signed-off-by: strawberry --- src/api/client/directory.rs | 8 +------- src/service/rooms/spaces/mod.rs | 8 +------- src/service/rooms/state_accessor/mod.rs | 13 ++++++++++++- 3 files changed, 14 insertions(+), 15 deletions(-) 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.")) + }) + } }