improvement: implement GET publicRooms
parent
821c608c6a
commit
61f4f2c716
|
@ -13,7 +13,7 @@ use ruma_client_api::{
|
||||||
alias::get_alias,
|
alias::get_alias,
|
||||||
capabilities::get_capabilities,
|
capabilities::get_capabilities,
|
||||||
config::{get_global_account_data, set_global_account_data},
|
config::{get_global_account_data, set_global_account_data},
|
||||||
directory::{self, get_public_rooms_filtered},
|
directory::{self, get_public_rooms, get_public_rooms_filtered},
|
||||||
filter::{self, create_filter, get_filter},
|
filter::{self, create_filter, get_filter},
|
||||||
keys::{claim_keys, get_keys, upload_keys},
|
keys::{claim_keys, get_keys, upload_keys},
|
||||||
media::{create_content, get_content_thumbnail, get_content, get_media_config},
|
media::{create_content, get_content_thumbnail, get_content, get_media_config},
|
||||||
|
@ -1136,6 +1136,46 @@ pub fn invite_user_route(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/_matrix/client/r0/publicRooms")]
|
||||||
|
pub async fn get_public_rooms_route(
|
||||||
|
db: State<'_, Database>,
|
||||||
|
) -> MatrixResult<get_public_rooms::Response> {
|
||||||
|
let mut chunk = db
|
||||||
|
.rooms
|
||||||
|
.all_rooms()
|
||||||
|
.into_iter()
|
||||||
|
.map(|room_id| {
|
||||||
|
let state = db.rooms.room_state(&room_id).unwrap();
|
||||||
|
directory::PublicRoomsChunk {
|
||||||
|
aliases: Vec::new(),
|
||||||
|
canonical_alias: None,
|
||||||
|
name: state
|
||||||
|
.get(&(EventType::RoomName, "".to_owned()))
|
||||||
|
.and_then(|s| s.content.get("name"))
|
||||||
|
.and_then(|n| n.as_str())
|
||||||
|
.map(|n| n.to_owned()),
|
||||||
|
num_joined_members: (db.rooms.room_members(&room_id).count() as u32).into(),
|
||||||
|
room_id,
|
||||||
|
topic: None,
|
||||||
|
world_readable: false,
|
||||||
|
guest_can_join: true,
|
||||||
|
avatar_url: None,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
chunk.sort_by(|l, r| r.num_joined_members.cmp(&l.num_joined_members));
|
||||||
|
|
||||||
|
let total_room_count_estimate = (chunk.len() as u32).into();
|
||||||
|
|
||||||
|
MatrixResult(Ok(get_public_rooms::Response {
|
||||||
|
chunk,
|
||||||
|
prev_batch: None,
|
||||||
|
next_batch: None,
|
||||||
|
total_room_count_estimate: Some(total_room_count_estimate),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
#[post("/_matrix/client/r0/publicRooms")]
|
#[post("/_matrix/client/r0/publicRooms")]
|
||||||
pub async fn get_public_rooms_filtered_route(
|
pub async fn get_public_rooms_filtered_route(
|
||||||
db: State<'_, Database>,
|
db: State<'_, Database>,
|
||||||
|
|
|
@ -55,6 +55,7 @@ fn setup_rocket() -> rocket::Rocket {
|
||||||
client_server::leave_room_route,
|
client_server::leave_room_route,
|
||||||
client_server::forget_room_route,
|
client_server::forget_room_route,
|
||||||
client_server::invite_user_route,
|
client_server::invite_user_route,
|
||||||
|
client_server::get_public_rooms_route,
|
||||||
client_server::get_public_rooms_filtered_route,
|
client_server::get_public_rooms_filtered_route,
|
||||||
client_server::search_users_route,
|
client_server::search_users_route,
|
||||||
client_server::get_member_events_route,
|
client_server::get_member_events_route,
|
||||||
|
|
Loading…
Reference in New Issue