From b1e7bc77a4d973af1d34c47da6ff18343613115d Mon Sep 17 00:00:00 2001 From: Devin R Date: Wed, 24 Jun 2020 17:56:56 -0400 Subject: [PATCH] Use ruma/ruma master, address review issues --- matrix_sdk_base/src/client.rs | 7 ++--- matrix_sdk_base/src/event_emitter/mod.rs | 2 ++ matrix_sdk_base/src/models/message.rs | 12 +++++++- matrix_sdk_base/src/models/room.rs | 36 ++++++++++++++++++------ matrix_sdk_common/Cargo.toml | 7 +---- 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/matrix_sdk_base/src/client.rs b/matrix_sdk_base/src/client.rs index 81f0df15..e3f18493 100644 --- a/matrix_sdk_base/src/client.rs +++ b/matrix_sdk_base/src/client.rs @@ -1492,11 +1492,8 @@ impl BaseClient { AnyStateEventStub::RoomTombstone(e) => { event_emitter.on_room_tombstone(room, &e).await } - AnyStateEventStub::RoomJoinRules(_e) => { - // TODO is this needed ?? - - // event_emitter - // .on_room_join_rules(room, &e).await + AnyStateEventStub::RoomJoinRules(e) => { + event_emitter.on_room_join_rules(room, &e).await } AnyStateEventStub::Custom(e) => { event_emitter diff --git a/matrix_sdk_base/src/event_emitter/mod.rs b/matrix_sdk_base/src/event_emitter/mod.rs index 8a68706a..17e8f8a8 100644 --- a/matrix_sdk_base/src/event_emitter/mod.rs +++ b/matrix_sdk_base/src/event_emitter/mod.rs @@ -141,6 +141,8 @@ pub trait EventEmitter: Send + Sync { async fn on_room_power_levels(&self, _: SyncRoom, _: &StateEventStub) { } /// Fires when `Client` receives a `RoomEvent::Tombstone` event. + async fn on_room_join_rules(&self, _: SyncRoom, _: &StateEventStub) {} + /// Fires when `Client` receives a `RoomEvent::Tombstone` event. async fn on_room_tombstone(&self, _: SyncRoom, _: &StateEventStub) {} // `RoomEvent`s from `IncomingState` diff --git a/matrix_sdk_base/src/models/message.rs b/matrix_sdk_base/src/models/message.rs index 56c645fb..2a97cb77 100644 --- a/matrix_sdk_base/src/models/message.rs +++ b/matrix_sdk_base/src/models/message.rs @@ -4,7 +4,7 @@ //! feature is enabled. use std::cmp::Ordering; -use std::ops::Deref; +use std::ops::{Deref, DerefMut}; use std::vec::IntoIter; use crate::events::room::message::MessageEventContent; @@ -30,6 +30,12 @@ impl Deref for MessageWrapper { } } +impl DerefMut for MessageWrapper { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + impl PartialEq for MessageWrapper { fn eq(&self, other: &MessageWrapper) -> bool { self.0.event_id == other.0.event_id @@ -98,6 +104,10 @@ impl MessageQueue { pub fn iter(&self) -> impl Iterator { self.msgs.iter() } + + pub fn iter_mut(&mut self) -> impl Iterator { + self.msgs.iter_mut() + } } impl IntoIterator for MessageQueue { diff --git a/matrix_sdk_base/src/models/room.rs b/matrix_sdk_base/src/models/room.rs index 321b4979..831143f2 100644 --- a/matrix_sdk_base/src/models/room.rs +++ b/matrix_sdk_base/src/models/room.rs @@ -30,6 +30,7 @@ use crate::events::room::{ member::{MemberEventContent, MembershipChange}, name::NameEventContent, power_levels::{NotificationPowerLevels, PowerLevelsEventContent}, + redaction::RedactionEventStub, tombstone::TombstoneEventContent, }; @@ -39,17 +40,17 @@ use crate::events::{ }; #[cfg(feature = "messages")] -use crate::events::{room::message::MessageEventContent as MsgContent, MessageEventStub}; +use crate::events::{ + room::message::{MessageEventContent, TextMessageEventContent}, + MessageEventStub, +}; use crate::identifiers::{RoomAliasId, RoomId, UserId}; use crate::js_int::{Int, UInt}; use serde::{Deserialize, Serialize}; -#[cfg(feature = "messages")] -type SentMessageEvent = MessageEventStub; - -#[derive(Debug, Default, PartialEq, Serialize, Deserialize, Clone)] +#[derive(Debug, Default, PartialEq, Serialize, Deserialize)] #[cfg_attr(test, derive(Clone))] /// `RoomName` allows the calculation of a text room name. pub struct RoomName { @@ -614,10 +615,29 @@ impl Room { /// Returns true if `MessageQueue` was added to. #[cfg(feature = "messages")] #[cfg_attr(docsrs, doc(cfg(feature = "messages")))] - pub fn handle_message(&mut self, event: &SentMessageEvent) -> bool { + pub fn handle_message(&mut self, event: &MessageEventStub) -> bool { self.messages.push(event.clone()) } + /// Handle a room.redaction event and update the `MessageQueue` if necessary. + /// + /// Returns true if `MessageQueue` was updated. + #[cfg(feature = "messages")] + #[cfg_attr(docsrs, doc(cfg(feature = "messages")))] + pub fn handle_redaction(&mut self, event: &RedactionEventStub) -> bool { + if let Some(msg) = self + .messages + .iter_mut() + .find(|msg| event.redacts == msg.event_id) + { + // TODO make msg an enum or use AnyMessageEventStub enum to represent + msg.content = MessageEventContent::Text(TextMessageEventContent::new_plain("Redacted")); + true + } else { + false + } + } + /// Handle a room.aliases event, updating the room state if necessary. /// /// Returns true if the room name changed, false otherwise. @@ -722,8 +742,8 @@ impl Room { AnyRoomEventStub::Message(event) => match &event { #[cfg(feature = "messages")] AnyMessageEventStub::RoomMessage(event) => self.handle_message(&event), - // TODO if a redaction event deletes one of our saved messages delete it? - AnyMessageEventStub::RoomRedaction(_) => false, + #[cfg(feature = "messages")] + AnyMessageEventStub::RoomRedaction(event) => self.handle_redaction(&event), _ => false, }, } diff --git a/matrix_sdk_common/Cargo.toml b/matrix_sdk_common/Cargo.toml index 438fa871..79712800 100644 --- a/matrix_sdk_common/Cargo.toml +++ b/matrix_sdk_common/Cargo.toml @@ -12,13 +12,8 @@ version = "0.1.0" [dependencies] js_int = "0.1.5" -# ruma-api = "0.16.1" -# ruma-client-api = "0.9.0" -# ruma-events = "0.21.2" -# ruma-identifiers = "0.16.1" -ruma = { git = "https://github.com/DevinR528/ruma", features = ["client-api", "rand"], branch = "matrix-sdk2"} -# ruma = { path = "../../ruma/ruma", features = ["client-api", "rand"] } +ruma = { git = "https://github.com/ruma/ruma", features = ["client-api", "rand"] } instant = { version = "0.1.4", features = ["wasm-bindgen", "now"] }