improvement: implement GET publicRooms
This commit is contained in:
		
							parent
							
								
									821c608c6a
								
							
						
					
					
						commit
						61f4f2c716
					
				
					 2 changed files with 42 additions and 1 deletions
				
			
		|  | @ -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 a new issue