Update dependencies and send displayname updates again

This commit is contained in:
timokoesters 2020-05-08 21:13:52 +02:00
parent 8f67c01efd
commit 551308e9a8
No known key found for this signature in database
GPG key ID: 356E705610F626D5
6 changed files with 123 additions and 112 deletions

View file

@ -12,7 +12,7 @@ use ruma_client_api::{
account::{get_username_availability, register},
alias::get_alias,
capabilities::get_capabilities,
client_exchange::send_event_to_device,
to_device::send_event_to_device,
config::{get_global_account_data, set_global_account_data},
directory::{self, get_public_rooms_filtered},
filter::{self, create_filter, get_filter},
@ -42,7 +42,7 @@ use ruma_client_api::{
};
use ruma_events::{collections::only::Event as EduEvent, EventType};
use ruma_identifiers::{RoomId, UserId};
use serde_json::json;
use serde_json::{json, value::RawValue};
use crate::{server_server, utils, Database, MatrixResult, Ruma};
@ -105,7 +105,7 @@ pub fn register_route(
stages: vec!["m.login.dummy".to_owned()],
}],
completed: vec![],
params: json!({}),
params: RawValue::from_string("".to_owned()).unwrap(),
session: Some(utils::random_string(SESSION_ID_LENGTH)),
auth_error: None,
})));
@ -185,7 +185,7 @@ pub fn register_route(
actions: vec![
ruma_events::push_rules::Action::Notify,
ruma_events::push_rules::Action::SetTweak(
ruma_events::push_rules::Tweak::Highlight { value: false },
ruma_common::push::Tweak::Highlight(false),
),
],
default: true,
@ -318,10 +318,7 @@ pub fn get_pushrules_all_route() -> MatrixResult<get_pushrules_all::Response> {
vec![push::PushRule {
actions: vec![
push::Action::Notify,
push::Action::SetTweak {
kind: push::TweakKind::Highlight,
value: Some(false.into()),
},
push::Action::SetTweak(ruma_common::push::Tweak::Highlight(false))
],
default: true,
enabled: true,
@ -363,7 +360,7 @@ pub fn set_pushrule_route(
actions: vec![
ruma_events::push_rules::Action::Notify,
ruma_events::push_rules::Action::SetTweak(
ruma_events::push_rules::Tweak::Highlight { value: false },
ruma_common::push::Tweak::Highlight(false),
),
],
default: true,
@ -467,8 +464,21 @@ pub fn set_displayname_route(
.users
.set_displayname(&user_id, Some(displayname.clone()))
.unwrap();
// TODO: send a new m.presence event with the updated displayname
}
// Send a new membership event into all joined rooms
for room_id in db.rooms.rooms_joined(&user_id) {
db.rooms.append_pdu(
room_id.unwrap(),
user_id.clone(),
EventType::RoomMember,
json!({"membership": "join", "displayname": displayname}),
None,
Some(user_id.to_string()),
&db.globals
).unwrap();
}
// TODO: send a new m.presence event
} else {
// Send error on None
// Synapse returns a parsing error but the spec doesn't require this
@ -734,7 +744,7 @@ pub fn create_room_route(
body: Ruma<create_room::Request>,
) -> MatrixResult<create_room::Response> {
// TODO: check if room is unique
let room_id = RoomId::new(db.globals.hostname()).expect("host is valid");
let room_id = RoomId::try_from(db.globals.hostname()).expect("host is valid");
let user_id = body.user_id.clone().expect("user is authenticated");
db
@ -1104,7 +1114,7 @@ pub fn create_message_event_route(
)
.expect("message events are always okay");
MatrixResult(Ok(create_message_event::Response { event_id }))
MatrixResult(Ok(create_message_event::Response { event_id: Some(event_id) }))
}
#[put(
@ -1134,7 +1144,7 @@ pub fn create_state_event_for_key_route(
)
.unwrap();
MatrixResult(Ok(create_state_event_for_key::Response { event_id }))
MatrixResult(Ok(create_state_event_for_key::Response { event_id: Some(event_id) }))
}
#[put(
@ -1163,7 +1173,7 @@ pub fn create_state_event_for_empty_key_route(
)
.unwrap();
MatrixResult(Ok(create_state_event_for_empty_key::Response { event_id }))
MatrixResult(Ok(create_state_event_for_empty_key::Response { event_id: Some(event_id) }))
}
#[get("/_matrix/client/r0/sync", data = "<body>")]
@ -1171,7 +1181,7 @@ pub fn sync_route(
db: State<'_, Database>,
body: Ruma<sync_events::Request>,
) -> MatrixResult<sync_events::Response> {
std::thread::sleep(Duration::from_millis(100));
std::thread::sleep(Duration::from_millis(1500));
let user_id = body.user_id.clone().expect("user is authenticated");
let next_batch = db.globals.current_count().unwrap().to_string();

View file

@ -40,7 +40,7 @@ impl Database {
globals: globals::Globals::load(db.open_tree("global").unwrap(), hostname.to_owned()),
users: users::Users {
userid_password: db.open_tree("userid_password").unwrap(),
userdeviceid: db.open_tree("userdeviceid").unwrap(),
userdeviceids: db.open_tree("userdeviceids").unwrap(),
userid_displayname: db.open_tree("userid_displayname").unwrap(),
userid_avatarurl: db.open_tree("userid_avatarurl").unwrap(),
userdeviceid_token: db.open_tree("userdeviceid_token").unwrap(),
@ -49,8 +49,8 @@ impl Database {
rooms: rooms::Rooms {
edus: rooms::RoomEdus {
roomuserid_lastread: db.open_tree("roomuserid_lastread").unwrap(),
roomlatestid_roomlatest: db.open_tree("roomlatestid_roomlatest").unwrap(),
roomactiveid_roomactive: db.open_tree("roomactiveid_roomactive").unwrap(),
roomlatestid_roomlatest: db.open_tree("roomlatestid_roomlatest").unwrap(), // Read receipts
roomactiveid_roomactive: db.open_tree("roomactiveid_roomactive").unwrap(), // Typing notifs
},
pduid_pdu: db.open_tree("pduid_pdu").unwrap(),
eventid_pduid: db.open_tree("eventid_pduid").unwrap(),

View file

@ -17,7 +17,7 @@ pub struct Rooms {
pub(super) pduid_pdu: sled::Tree, // PduId = RoomId + Count
pub(super) eventid_pduid: sled::Tree,
pub(super) roomid_pduleaves: sled::Tree,
pub(super) roomstateid_pdu: sled::Tree, // Room + StateType + StateKey
pub(super) roomstateid_pdu: sled::Tree, // RoomStateId = Room + StateType + StateKey
pub(super) userroomid_joined: sled::Tree,
pub(super) roomuserid_joined: sled::Tree,
@ -29,11 +29,10 @@ pub struct Rooms {
impl Rooms {
/// Checks if a room exists.
pub fn exists(&self, room_id: &RoomId) -> Result<bool> {
// Look for PDUs in that room.
let mut prefix = room_id.to_string().as_bytes().to_vec();
prefix.push(0xff);
// Look for PDUs in that room.
Ok(self
.pduid_pdu
.get_gt(&prefix)?

View file

@ -6,7 +6,7 @@ pub struct Users {
pub(super) userid_password: sled::Tree,
pub(super) userid_displayname: sled::Tree,
pub(super) userid_avatarurl: sled::Tree,
pub(super) userdeviceid: sled::Tree,
pub(super) userdeviceids: sled::Tree,
pub(super) userdeviceid_token: sled::Tree,
pub(super) token_userid: sled::Tree,
}
@ -63,18 +63,6 @@ impl Users {
}
Ok(())
/* TODO:
for room_id in self.rooms_joined(user_id) {
self.pdu_append(
room_id.clone(),
user_id.clone(),
EventType::RoomMember,
json!({"membership": "join", "displayname": displayname}),
None,
Some(user_id.to_string()),
);
}
*/
}
/// Get a the avatar_url of a user.
@ -108,7 +96,7 @@ impl Users {
key.push(0xff);
key.extend_from_slice(device_id.as_bytes());
self.userdeviceid.insert(key, &[])?;
self.userdeviceids.insert(key, &[])?;
self.set_token(user_id, device_id, token)?;
@ -121,7 +109,7 @@ impl Users {
key.push(0xff);
key.extend_from_slice(device_id.as_bytes());
if self.userdeviceid.get(&key)?.is_none() {
if self.userdeviceids.get(&key)?.is_none() {
return Err(Error::BadRequest(
"Tried to set token for nonexistent device",
));