improvement: get state
This commit is contained in:
		
							parent
							
								
									6215218c3c
								
							
						
					
					
						commit
						56dd6cb16f
					
				
					 3 changed files with 85 additions and 5 deletions
				
			
		|  | @ -24,7 +24,7 @@ log = "0.4.8" | ||||||
| sled = "0.31.0" | sled = "0.31.0" | ||||||
| directories = "2.0.2" | directories = "2.0.2" | ||||||
| js_int = "0.1.5" | js_int = "0.1.5" | ||||||
| serde_json = "1.0.53" | serde_json = { version = "1.0.53", features = ["raw_value"] } | ||||||
| serde = "1.0.110" | serde = "1.0.110" | ||||||
| tokio = { version = "0.2.21", features = ["macros"] } | tokio = { version = "0.2.21", features = ["macros"] } | ||||||
| rand = "0.7.3" | rand = "0.7.3" | ||||||
|  |  | ||||||
|  | @ -30,7 +30,10 @@ use ruma_client_api::{ | ||||||
|         read_marker::set_read_marker, |         read_marker::set_read_marker, | ||||||
|         room::create_room, |         room::create_room, | ||||||
|         session::{get_login_types, login}, |         session::{get_login_types, login}, | ||||||
|         state::{create_state_event_for_empty_key, create_state_event_for_key}, |         state::{ | ||||||
|  |             create_state_event_for_empty_key, create_state_event_for_key, get_state_events, | ||||||
|  |             get_state_events_for_empty_key, get_state_events_for_key, | ||||||
|  |         }, | ||||||
|         sync::sync_events, |         sync::sync_events, | ||||||
|         thirdparty::get_protocols, |         thirdparty::get_protocols, | ||||||
|         to_device::{self, send_event_to_device}, |         to_device::{self, send_event_to_device}, | ||||||
|  | @ -1233,10 +1236,10 @@ pub fn get_protocols_route() -> MatrixResult<get_protocols::Response> { | ||||||
| )] | )] | ||||||
| pub fn create_message_event_route( | pub fn create_message_event_route( | ||||||
|     db: State<'_, Database>, |     db: State<'_, Database>, | ||||||
|  |     body: Ruma<create_message_event::Request>, | ||||||
|     _room_id: String, |     _room_id: String, | ||||||
|     _event_type: String, |     _event_type: String, | ||||||
|     _txn_id: String, |     _txn_id: String, | ||||||
|     body: Ruma<create_message_event::Request>, |  | ||||||
| ) -> MatrixResult<create_message_event::Response> { | ) -> MatrixResult<create_message_event::Response> { | ||||||
|     let user_id = body.user_id.as_ref().expect("user is authenticated"); |     let user_id = body.user_id.as_ref().expect("user is authenticated"); | ||||||
| 
 | 
 | ||||||
|  | @ -1267,10 +1270,10 @@ pub fn create_message_event_route( | ||||||
| )] | )] | ||||||
| pub fn create_state_event_for_key_route( | pub fn create_state_event_for_key_route( | ||||||
|     db: State<'_, Database>, |     db: State<'_, Database>, | ||||||
|  |     body: Ruma<create_state_event_for_key::Request>, | ||||||
|     _room_id: String, |     _room_id: String, | ||||||
|     _event_type: String, |     _event_type: String, | ||||||
|     _state_key: String, |     _state_key: String, | ||||||
|     body: Ruma<create_state_event_for_key::Request>, |  | ||||||
| ) -> MatrixResult<create_state_event_for_key::Response> { | ) -> MatrixResult<create_state_event_for_key::Response> { | ||||||
|     let user_id = body.user_id.as_ref().expect("user is authenticated"); |     let user_id = body.user_id.as_ref().expect("user is authenticated"); | ||||||
| 
 | 
 | ||||||
|  | @ -1299,9 +1302,9 @@ pub fn create_state_event_for_key_route( | ||||||
| )] | )] | ||||||
| pub fn create_state_event_for_empty_key_route( | pub fn create_state_event_for_empty_key_route( | ||||||
|     db: State<'_, Database>, |     db: State<'_, Database>, | ||||||
|  |     body: Ruma<create_state_event_for_empty_key::Request>, | ||||||
|     _room_id: String, |     _room_id: String, | ||||||
|     _event_type: String, |     _event_type: String, | ||||||
|     body: Ruma<create_state_event_for_empty_key::Request>, |  | ||||||
| ) -> MatrixResult<create_state_event_for_empty_key::Response> { | ) -> MatrixResult<create_state_event_for_empty_key::Response> { | ||||||
|     let user_id = body.user_id.as_ref().expect("user is authenticated"); |     let user_id = body.user_id.as_ref().expect("user is authenticated"); | ||||||
| 
 | 
 | ||||||
|  | @ -1324,6 +1327,80 @@ pub fn create_state_event_for_empty_key_route( | ||||||
|     })) |     })) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[get("/_matrix/client/r0/rooms/<_room_id>/state", data = "<body>")] | ||||||
|  | pub fn get_state_events_route( | ||||||
|  |     db: State<'_, Database>, | ||||||
|  |     body: Ruma<get_state_events::Request>, | ||||||
|  |     _room_id: String, | ||||||
|  | ) -> MatrixResult<get_state_events::Response> { | ||||||
|  |     MatrixResult(Ok(get_state_events::Response { | ||||||
|  |         room_state: db | ||||||
|  |             .rooms | ||||||
|  |             .room_state(&body.room_id) | ||||||
|  |             .unwrap() | ||||||
|  |             .values() | ||||||
|  |             .map(|pdu| pdu.to_state_event()) | ||||||
|  |             .collect(), | ||||||
|  |     })) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[get(
 | ||||||
|  |     "/_matrix/client/r0/rooms/<_room_id>/state/<_event_type>/<_state_key>", | ||||||
|  |     data = "<body>" | ||||||
|  | )] | ||||||
|  | pub fn get_state_events_for_key_route( | ||||||
|  |     db: State<'_, Database>, | ||||||
|  |     body: Ruma<get_state_events_for_key::Request>, | ||||||
|  |     _room_id: String, | ||||||
|  |     _event_type: String, | ||||||
|  |     _state_key: String, | ||||||
|  | ) -> MatrixResult<get_state_events_for_key::Response> { | ||||||
|  |     if let Some(event) = db | ||||||
|  |         .rooms | ||||||
|  |         .room_state(&body.room_id) | ||||||
|  |         .unwrap() | ||||||
|  |         .get(&(body.event_type.clone(), body.state_key.clone())) | ||||||
|  |     { | ||||||
|  |         MatrixResult(Ok(get_state_events_for_key::Response { | ||||||
|  |             content: serde_json::value::to_raw_value(event).unwrap(), | ||||||
|  |         })) | ||||||
|  |     } else { | ||||||
|  |         MatrixResult(Err(Error { | ||||||
|  |             kind: ErrorKind::NotFound, | ||||||
|  |             message: "State event not found.".to_owned(), | ||||||
|  |             status_code: http::StatusCode::BAD_REQUEST, | ||||||
|  |         })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[get(
 | ||||||
|  |     "/_matrix/client/r0/rooms/<_room_id>/state/<_event_type>", | ||||||
|  |     data = "<body>" | ||||||
|  | )] | ||||||
|  | pub fn get_state_events_for_empty_key_route( | ||||||
|  |     db: State<'_, Database>, | ||||||
|  |     body: Ruma<get_state_events_for_empty_key::Request>, | ||||||
|  |     _room_id: String, | ||||||
|  |     _event_type: String, | ||||||
|  | ) -> MatrixResult<get_state_events_for_key::Response> { | ||||||
|  |     if let Some(event) = db | ||||||
|  |         .rooms | ||||||
|  |         .room_state(&body.room_id) | ||||||
|  |         .unwrap() | ||||||
|  |         .get(&(body.event_type.clone(), "".to_owned())) | ||||||
|  |     { | ||||||
|  |         MatrixResult(Ok(get_state_events_for_key::Response { | ||||||
|  |             content: serde_json::value::to_raw_value(event).unwrap(), | ||||||
|  |         })) | ||||||
|  |     } else { | ||||||
|  |         MatrixResult(Err(Error { | ||||||
|  |             kind: ErrorKind::NotFound, | ||||||
|  |             message: "State event not found.".to_owned(), | ||||||
|  |             status_code: http::StatusCode::BAD_REQUEST, | ||||||
|  |         })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[get("/_matrix/client/r0/sync", data = "<body>")] | #[get("/_matrix/client/r0/sync", data = "<body>")] | ||||||
| pub fn sync_route( | pub fn sync_route( | ||||||
|     db: State<'_, Database>, |     db: State<'_, Database>, | ||||||
|  |  | ||||||
|  | @ -62,6 +62,9 @@ fn setup_rocket() -> rocket::Rocket { | ||||||
|                 client_server::create_message_event_route, |                 client_server::create_message_event_route, | ||||||
|                 client_server::create_state_event_for_key_route, |                 client_server::create_state_event_for_key_route, | ||||||
|                 client_server::create_state_event_for_empty_key_route, |                 client_server::create_state_event_for_empty_key_route, | ||||||
|  |                 client_server::get_state_events_route, | ||||||
|  |                 client_server::get_state_events_for_key_route, | ||||||
|  |                 client_server::get_state_events_for_empty_key_route, | ||||||
|                 client_server::sync_route, |                 client_server::sync_route, | ||||||
|                 client_server::get_message_events_route, |                 client_server::get_message_events_route, | ||||||
|                 client_server::turn_server_route, |                 client_server::turn_server_route, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue