refactor get_room_topic into 1 single function

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2024-06-08 20:56:51 -04:00
parent 88d038ffec
commit fcdf1463ef
3 changed files with 16 additions and 20 deletions

View file

@ -13,7 +13,6 @@ use ruma::{
avatar::RoomAvatarEventContent, avatar::RoomAvatarEventContent,
create::RoomCreateEventContent, create::RoomCreateEventContent,
join_rules::{JoinRule, RoomJoinRulesEventContent}, join_rules::{JoinRule, RoomJoinRulesEventContent},
topic::RoomTopicEventContent,
}, },
StateEventType, StateEventType,
}, },
@ -243,15 +242,7 @@ pub(crate) async fn get_public_rooms_filtered_helper(
topic: services() topic: services()
.rooms .rooms
.state_accessor .state_accessor
.room_state_get(&room_id, &StateEventType::RoomTopic, "")? .get_room_topic(&room_id)
.map_or(Ok(None), |s| {
serde_json::from_str(s.content.get())
.map(|c: RoomTopicEventContent| Some(c.topic))
.map_err(|e| {
error!("Invalid room topic event in database for room {room_id}: {e}");
Error::bad_database("Invalid room topic event in database.")
})
})
.unwrap_or(None), .unwrap_or(None),
world_readable: services().rooms.state_accessor.is_world_readable(&room_id)?, world_readable: services().rooms.state_accessor.is_world_readable(&room_id)?,
guest_can_join: services() guest_can_join: services()

View file

@ -17,7 +17,6 @@ use ruma::{
avatar::RoomAvatarEventContent, avatar::RoomAvatarEventContent,
create::RoomCreateEventContent, create::RoomCreateEventContent,
join_rules::{AllowRule, JoinRule, RoomJoinRulesEventContent, RoomMembership}, join_rules::{AllowRule, JoinRule, RoomJoinRulesEventContent, RoomMembership},
topic::RoomTopicEventContent,
}, },
space::child::{HierarchySpaceChildEvent, SpaceChildEventContent}, space::child::{HierarchySpaceChildEvent, SpaceChildEventContent},
StateEventType, StateEventType,
@ -573,15 +572,7 @@ impl Service {
topic: services() topic: services()
.rooms .rooms
.state_accessor .state_accessor
.room_state_get(room_id, &StateEventType::RoomTopic, "")? .get_room_topic(room_id)
.map_or(Ok(None), |s| {
serde_json::from_str(s.content.get())
.map(|c: RoomTopicEventContent| Some(c.topic))
.map_err(|_| {
error!("Invalid room topic event in database for room {}", room_id);
Error::bad_database("Invalid room topic event in database.")
})
})
.unwrap_or(None), .unwrap_or(None),
world_readable: services().rooms.state_accessor.is_world_readable(room_id)?, world_readable: services().rooms.state_accessor.is_world_readable(room_id)?,
guest_can_join: services().rooms.state_accessor.guest_can_join(room_id)?, guest_can_join: services().rooms.state_accessor.guest_can_join(room_id)?,

View file

@ -15,6 +15,7 @@ use ruma::{
history_visibility::{HistoryVisibility, RoomHistoryVisibilityEventContent}, history_visibility::{HistoryVisibility, RoomHistoryVisibilityEventContent},
member::{MembershipState, RoomMemberEventContent}, member::{MembershipState, RoomMemberEventContent},
name::RoomNameEventContent, name::RoomNameEventContent,
topic::RoomTopicEventContent,
}, },
StateEventType, StateEventType,
}, },
@ -341,4 +342,17 @@ impl Service {
.map_err(|_| Error::bad_database("Invalid canonical alias event in database.")) .map_err(|_| Error::bad_database("Invalid canonical alias event in database."))
}) })
} }
/// Gets the room topic
pub fn get_room_topic(&self, room_id: &RoomId) -> Result<Option<String>, Error> {
self.room_state_get(room_id, &StateEventType::RoomTopic, "")?
.map_or(Ok(None), |s| {
serde_json::from_str(s.content.get())
.map(|c: RoomTopicEventContent| Some(c.topic))
.map_err(|e| {
error!("Invalid room topic event in database for room {room_id}: {e}");
Error::bad_database("Invalid room topic event in database.")
})
})
}
} }