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"
|
||||
directories = "2.0.2"
|
||||
js_int = "0.1.5"
|
||||
serde_json = "1.0.53"
|
||||
serde_json = { version = "1.0.53", features = ["raw_value"] }
|
||||
serde = "1.0.110"
|
||||
tokio = { version = "0.2.21", features = ["macros"] }
|
||||
rand = "0.7.3"
|
||||
|
|
|
@ -30,7 +30,10 @@ use ruma_client_api::{
|
|||
read_marker::set_read_marker,
|
||||
room::create_room,
|
||||
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,
|
||||
thirdparty::get_protocols,
|
||||
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(
|
||||
db: State<'_, Database>,
|
||||
body: Ruma<create_message_event::Request>,
|
||||
_room_id: String,
|
||||
_event_type: String,
|
||||
_txn_id: String,
|
||||
body: Ruma<create_message_event::Request>,
|
||||
) -> MatrixResult<create_message_event::Response> {
|
||||
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(
|
||||
db: State<'_, Database>,
|
||||
body: Ruma<create_state_event_for_key::Request>,
|
||||
_room_id: String,
|
||||
_event_type: String,
|
||||
_state_key: String,
|
||||
body: Ruma<create_state_event_for_key::Request>,
|
||||
) -> MatrixResult<create_state_event_for_key::Response> {
|
||||
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(
|
||||
db: State<'_, Database>,
|
||||
body: Ruma<create_state_event_for_empty_key::Request>,
|
||||
_room_id: String,
|
||||
_event_type: String,
|
||||
body: Ruma<create_state_event_for_empty_key::Request>,
|
||||
) -> MatrixResult<create_state_event_for_empty_key::Response> {
|
||||
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>")]
|
||||
pub fn sync_route(
|
||||
db: State<'_, Database>,
|
||||
|
|
|
@ -62,6 +62,9 @@ fn setup_rocket() -> rocket::Rocket {
|
|||
client_server::create_message_event_route,
|
||||
client_server::create_state_event_for_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::get_message_events_route,
|
||||
client_server::turn_server_route,
|
||||
|
|
Loading…
Reference in a new issue