|
|
|
|
@ -209,17 +209,15 @@ pub async fn get_public_rooms_filtered_helper(
@@ -209,17 +209,15 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
.map(|room_id| { |
|
|
|
|
let room_id = room_id?; |
|
|
|
|
|
|
|
|
|
// TODO: Do not load full state?
|
|
|
|
|
let state = db.rooms.room_state_full(&room_id)?; |
|
|
|
|
|
|
|
|
|
let chunk = PublicRoomsChunk { |
|
|
|
|
aliases: Vec::new(), |
|
|
|
|
canonical_alias: state |
|
|
|
|
.get(&(EventType::RoomCanonicalAlias, "".to_owned())) |
|
|
|
|
canonical_alias: db |
|
|
|
|
.rooms |
|
|
|
|
.room_state_get(&room_id, &EventType::RoomCanonicalAlias, "")? |
|
|
|
|
.map_or(Ok::<_, Error>(None), |s| { |
|
|
|
|
Ok(serde_json::from_value::< |
|
|
|
|
Raw<canonical_alias::CanonicalAliasEventContent>, |
|
|
|
|
>(s.content.clone()) |
|
|
|
|
>(s.content) |
|
|
|
|
.expect("from_value::<Raw<..>> can never fail") |
|
|
|
|
.deserialize() |
|
|
|
|
.map_err(|_| { |
|
|
|
|
@ -227,11 +225,12 @@ pub async fn get_public_rooms_filtered_helper(
@@ -227,11 +225,12 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
})? |
|
|
|
|
.alias) |
|
|
|
|
})?, |
|
|
|
|
name: state.get(&(EventType::RoomName, "".to_owned())).map_or( |
|
|
|
|
Ok::<_, Error>(None), |
|
|
|
|
|s| { |
|
|
|
|
name: db |
|
|
|
|
.rooms |
|
|
|
|
.room_state_get(&room_id, &EventType::RoomName, "")? |
|
|
|
|
.map_or(Ok::<_, Error>(None), |s| { |
|
|
|
|
Ok(serde_json::from_value::<Raw<name::NameEventContent>>( |
|
|
|
|
s.content.clone(), |
|
|
|
|
s.content, |
|
|
|
|
) |
|
|
|
|
.expect("from_value::<Raw<..>> can never fail") |
|
|
|
|
.deserialize() |
|
|
|
|
@ -240,16 +239,15 @@ pub async fn get_public_rooms_filtered_helper(
@@ -240,16 +239,15 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
})? |
|
|
|
|
.name() |
|
|
|
|
.map(|n| n.to_owned())) |
|
|
|
|
}, |
|
|
|
|
)?, |
|
|
|
|
})?, |
|
|
|
|
num_joined_members: (db.rooms.room_members(&room_id).count() as u32).into(), |
|
|
|
|
room_id, |
|
|
|
|
topic: state.get(&(EventType::RoomTopic, "".to_owned())).map_or( |
|
|
|
|
Ok::<_, Error>(None), |
|
|
|
|
|s| { |
|
|
|
|
topic: db |
|
|
|
|
.rooms |
|
|
|
|
.room_state_get(&room_id, &EventType::RoomTopic, "")? |
|
|
|
|
.map_or(Ok::<_, Error>(None), |s| { |
|
|
|
|
Ok(Some( |
|
|
|
|
serde_json::from_value::<Raw<topic::TopicEventContent>>( |
|
|
|
|
s.content.clone(), |
|
|
|
|
s.content, |
|
|
|
|
) |
|
|
|
|
.expect("from_value::<Raw<..>> can never fail") |
|
|
|
|
.deserialize() |
|
|
|
|
@ -258,14 +256,14 @@ pub async fn get_public_rooms_filtered_helper(
@@ -258,14 +256,14 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
})? |
|
|
|
|
.topic, |
|
|
|
|
)) |
|
|
|
|
}, |
|
|
|
|
)?, |
|
|
|
|
world_readable: state |
|
|
|
|
.get(&(EventType::RoomHistoryVisibility, "".to_owned())) |
|
|
|
|
})?, |
|
|
|
|
world_readable: db |
|
|
|
|
.rooms |
|
|
|
|
.room_state_get(&room_id, &EventType::RoomHistoryVisibility, "")? |
|
|
|
|
.map_or(Ok::<_, Error>(false), |s| { |
|
|
|
|
Ok(serde_json::from_value::< |
|
|
|
|
Raw<history_visibility::HistoryVisibilityEventContent>, |
|
|
|
|
>(s.content.clone()) |
|
|
|
|
>(s.content) |
|
|
|
|
.expect("from_value::<Raw<..>> can never fail") |
|
|
|
|
.deserialize() |
|
|
|
|
.map_err(|_| { |
|
|
|
|
@ -276,12 +274,13 @@ pub async fn get_public_rooms_filtered_helper(
@@ -276,12 +274,13 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
.history_visibility |
|
|
|
|
== history_visibility::HistoryVisibility::WorldReadable) |
|
|
|
|
})?, |
|
|
|
|
guest_can_join: state |
|
|
|
|
.get(&(EventType::RoomGuestAccess, "".to_owned())) |
|
|
|
|
guest_can_join: db |
|
|
|
|
.rooms |
|
|
|
|
.room_state_get(&room_id, &EventType::RoomGuestAccess, "")? |
|
|
|
|
.map_or(Ok::<_, Error>(false), |s| { |
|
|
|
|
Ok( |
|
|
|
|
serde_json::from_value::<Raw<guest_access::GuestAccessEventContent>>( |
|
|
|
|
s.content.clone(), |
|
|
|
|
s.content, |
|
|
|
|
) |
|
|
|
|
.expect("from_value::<Raw<..>> can never fail") |
|
|
|
|
.deserialize() |
|
|
|
|
@ -292,12 +291,13 @@ pub async fn get_public_rooms_filtered_helper(
@@ -292,12 +291,13 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
== guest_access::GuestAccess::CanJoin, |
|
|
|
|
) |
|
|
|
|
})?, |
|
|
|
|
avatar_url: state |
|
|
|
|
.get(&(EventType::RoomAvatar, "".to_owned())) |
|
|
|
|
avatar_url: db |
|
|
|
|
.rooms |
|
|
|
|
.room_state_get(&room_id, &EventType::RoomAvatar, "")? |
|
|
|
|
.map(|s| { |
|
|
|
|
Ok::<_, Error>( |
|
|
|
|
serde_json::from_value::<Raw<avatar::AvatarEventContent>>( |
|
|
|
|
s.content.clone(), |
|
|
|
|
s.content, |
|
|
|
|
) |
|
|
|
|
.expect("from_value::<Raw<..>> can never fail") |
|
|
|
|
.deserialize() |
|
|
|
|
@ -310,6 +310,7 @@ pub async fn get_public_rooms_filtered_helper(
@@ -310,6 +310,7 @@ pub async fn get_public_rooms_filtered_helper(
|
|
|
|
|
.transpose()? |
|
|
|
|
// url is now an Option<String> so we must flatten
|
|
|
|
|
.flatten(), |
|
|
|
|
room_id, |
|
|
|
|
}; |
|
|
|
|
Ok(chunk) |
|
|
|
|
}) |
|
|
|
|
|