daydream

A small matrix web client written in rust
git clone git://archive.git.mtrnord.blog/daydream-mx/daydream.git
Log | Files | Refs | README | LICENSE

commit 3a34ab7133feb6d4ac37d924af1162f374eb8c29
parent afb38af4c49a984f0e575ece859e6ea7c92ebe20
Author: Marcel <mtrnord1@gmail.com>
Date:   Fri, 10 Jul 2020 16:39:24 +0200

WIP monorepo

Took 26 minutes

Diffstat:
MCargo.toml | 1-
Msrc/app/components/events/mod.rs | 10+++++-----
Msrc/app/components/room_list/item.rs | 2+-
Msrc/app/matrix/mod.rs | 8++++----
Msrc/app/matrix/sync.rs | 14++++++++------
5 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml @@ -62,7 +62,6 @@ features = [ [patch.crates-io] olm-sys = { git = "https://gitlab.gnome.org/stoically/olm-sys", branch = "wasm-target" } cjson = { git = "https://github.com/engineerd/cjson" } -ruma-events = { git = "https://github.com/ruma/ruma-events", rev="3f74ba327093d4f32e11c2741aaa649e4ab733d9" } reqwest = { git = "https://github.com/daydream-mx/reqwest.git", branch = "MTRNord/wasm-worker-support"} [profile.release] diff --git a/src/app/components/events/mod.rs b/src/app/components/events/mod.rs @@ -1,5 +1,5 @@ use crate::app::matrix::types::get_media_download_url; -use matrix_sdk::events::room::message::MessageEvent; +use matrix_sdk::events::MessageEventStub; use matrix_sdk::Room; use url::Url; @@ -8,7 +8,7 @@ pub mod notice; pub mod text; pub mod video; -pub fn is_new_user(prev_event: Option<&MessageEvent>, event: &MessageEvent) -> bool { +pub fn is_new_user(prev_event: Option<&MessageEventStub>, event: &MessageEventStub) -> bool { if let Some(prev_event) = prev_event { prev_event.sender != event.sender } else { @@ -16,15 +16,15 @@ pub fn is_new_user(prev_event: Option<&MessageEvent>, event: &MessageEvent) -> b } } -pub fn get_sender_displayname<'a>(room: &'a Room, event: &'a MessageEvent) -> &'a str { +pub fn get_sender_displayname<'a>(room: &'a Room, event: &'a MessageEventStub) -> &'a str { room.joined_members .get(&event.sender) .or_else(|| room.invited_members.get(&event.sender)) .and_then(|member| member.display_name.as_deref()) - .unwrap_or_else(|| event.sender.as_ref()) + .unwrap_or_else(|| event.sender.as_deref()) } -pub fn get_sender_avatar<'a>(homeserver_url: &'a Url, room: &'a Room, event: &'a MessageEvent) -> Option<Url> { +pub fn get_sender_avatar<'a>(homeserver_url: &'a Url, room: &'a Room, event: &'a MessageEventStub) -> Option<Url> { let member = room .joined_members .get(&event.sender) diff --git a/src/app/components/room_list/item.rs b/src/app/components/room_list/item.rs @@ -50,7 +50,7 @@ impl Component for RoomItem { let last_message = match room.messages.iter().last() { None => "".to_string(), Some(m) => { - if let MessageEventContent::Text(text_event) = &m.content { + if let MessageEventContent::Text(text_event) = m.content.clone() { text_event.body.clone() } else { "".to_string() diff --git a/src/app/matrix/mod.rs b/src/app/matrix/mod.rs @@ -5,7 +5,7 @@ use log::*; use matrix_sdk::{ api::r0::{filter::RoomEventFilter, message::get_message_events::Direction}, events::{ - collections::all::RoomEvent, + AnyRoomEvent, room::message::{ FormattedBody, MessageEvent, MessageEventContent, MessageFormat, TextMessageEventContent, @@ -285,18 +285,18 @@ impl Agent for MatrixAgent { // TODO save end point for future loading let mut wrapped_messages: Vec<EventJson<MessageEvent>> = Vec::new(); - let chunk_iter: Vec<EventJson<RoomEvent>> = messsages.chunk; + let chunk_iter: Vec<EventJson<AnyRoomEvent>> = messsages.chunk; let (oks, _): (Vec<_>, Vec<_>) = chunk_iter .iter() .map(|event| event.deserialize()) .partition(Result::is_ok); - let deserialized_events: Vec<RoomEvent> = + let deserialized_events: Vec<AnyRoomEvent> = oks.into_iter().map(Result::unwrap).collect(); for event in deserialized_events.into_iter().rev() { // TODO deduplicate betweeen this and sync - if let RoomEvent::RoomMessage(mut event) = event { + if let AnyRoomEvent::RoomMessage(mut event) = event { if let MessageEventContent::Image(mut image_event) = event.clone().content { diff --git a/src/app/matrix/sync.rs b/src/app/matrix/sync.rs @@ -7,7 +7,9 @@ use log::*; use matrix_sdk::{ api::r0::sync::sync_events::Response as SyncResponse, events::{ - collections::all::{RoomEvent, StateEvent}, + AnyRoomEventStub, + AnyStateEventStub, + AnyMessageEventStub, room::message::MessageEventContent, EventJson, }, @@ -71,24 +73,24 @@ impl Sync { } } - async fn on_state_event(&self, room_id: &RoomId, event: StateEvent) { - if let StateEvent::RoomCreate(_event) = event { + async fn on_state_event(&self, room_id: &RoomId, event: AnyStateEventStub) { + if let AnyStateEventStub::RoomCreate(_event) = event { info!("Sent JoinedRoomSync State"); let resp = Response::JoinedRoomSync(room_id.clone()); self.callback.emit(resp); } } - async fn on_room_message(&self, room_id: &RoomId, event: RoomEvent) { + async fn on_room_message(&self, room_id: &RoomId, event: AnyRoomEventStub) { // TODO handle all messages... - if let RoomEvent::RoomCreate(_create_event) = event.clone() { + if let AnyRoomEventStub::State(AnyStateEventStub::RoomCreate(_create_event)) = event.clone() { info!("Sent JoinedRoomSync Timeline"); let resp = Response::JoinedRoomSync(room_id.clone()); self.callback.emit(resp); } - if let RoomEvent::RoomMessage(mut event) = event { + if let AnyRoomEventStub::Message(AnyMessageEventStub::RoomMessage(mut event)) = event { if let MessageEventContent::Text(text_event) = event.content.clone() { let homeserver_url = self.matrix_client.clone().homeserver().clone();