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 99432684f227c10283cf0731dda6f1efb985487c
parent 411ae630685cb817f55a34dd045bab51b751ef80
Author: Marcel <mtrnord1@gmail.com>
Date:   Fri, 10 Jul 2020 19:17:48 +0200

Some more migration to the monorepo

Took 17 minutes

Diffstat:
Msrc/app/components/event_list.rs | 11+++++------
Msrc/app/components/room_list/item.rs | 2+-
Msrc/app/matrix/mod.rs | 3+--
Msrc/app/matrix/sync.rs | 1-
Msrc/utils/mod.rs | 1+
Asrc/utils/ruma.rs | 47+++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 55 insertions(+), 10 deletions(-)

diff --git a/src/app/components/event_list.rs b/src/app/components/event_list.rs @@ -1,11 +1,9 @@ use std::{collections::HashMap, rc::Rc}; +use crate::utils::ruma::AnyMessageEventExt; use log::*; use matrix_sdk::{ - events::{ - room::message::MessageEventContent, AnyMessageEvent, AnyMessageEventContent, - AnyMessageEventStub, - }, + events::{room::message::MessageEventContent, AnyMessageEventContent, AnyMessageEventStub}, identifiers::RoomId, Room, }; @@ -27,7 +25,7 @@ pub struct EventList { #[derive(Default)] pub struct State { // TODO handle all events - pub events: HashMap<RoomId, Vec<AnyMessageEvent>>, + pub events: HashMap<RoomId, Vec<AnyMessageEventStub>>, } #[allow(clippy::large_enum_variant)] @@ -94,10 +92,11 @@ impl Component for EventList { } } Response::OldMessages((room_id, messages)) => { - let mut deserialized_messages: Vec<AnyMessageEvent> = messages + let mut deserialized_messages: Vec<AnyMessageEventStub> = messages .iter() .map(|x| x.deserialize()) .filter_map(Result::ok) + .map(|x| x.without_room_id()) .collect(); // This is a clippy false positive #[allow(clippy::map_entry)] diff --git a/src/app/components/room_list/item.rs b/src/app/components/room_list/item.rs @@ -57,7 +57,7 @@ impl Component for RoomItem { if let AnyMessageEventContent::RoomMessage(MessageEventContent::Text(text_event)) = m.content.clone() { - text_event.body.clone() + text_event.body } else { "".to_string() } diff --git a/src/app/matrix/mod.rs b/src/app/matrix/mod.rs @@ -6,8 +6,7 @@ use matrix_sdk::{ api::r0::{filter::RoomEventFilter, message::get_message_events::Direction}, events::{ room::message::{ - FormattedBody, MessageEventContent, MessageFormat, - TextMessageEventContent, + FormattedBody, MessageEventContent, MessageFormat, TextMessageEventContent, }, AnyMessageEvent, AnyMessageEventStub, AnyRoomEvent, EventJson, }, diff --git a/src/app/matrix/sync.rs b/src/app/matrix/sync.rs @@ -7,7 +7,6 @@ use log::*; use matrix_sdk::{ api::r0::sync::sync_events::Response as SyncResponse, events::{ - room::message::MessageEventContent, AnyMessageEventStub, AnyRoomEventStub, AnyStateEventStub, EventJson, }, diff --git a/src/utils/mod.rs b/src/utils/mod.rs @@ -1,2 +1,3 @@ pub mod notifications; +pub mod ruma; pub mod string_utils; diff --git a/src/utils/ruma.rs b/src/utils/ruma.rs @@ -0,0 +1,47 @@ +use matrix_sdk::events::{ + room::redaction::RedactionEventStub, AnyMessageEvent, AnyMessageEventStub, MessageEvent, + MessageEventContent, MessageEventStub, +}; + +pub trait AnyMessageEventExt { + fn without_room_id(self) -> AnyMessageEventStub; +} + +impl AnyMessageEventExt for AnyMessageEvent { + fn without_room_id(self) -> AnyMessageEventStub { + fn without_room_id<C>(ev: MessageEvent<C>) -> MessageEventStub<C> + where + C: MessageEventContent, + { + MessageEventStub { + content: ev.content, + event_id: ev.event_id, + sender: ev.sender, + origin_server_ts: ev.origin_server_ts, + unsigned: ev.unsigned, + } + } + + use AnyMessageEventStub::*; + + match self { + Self::CallAnswer(ev) => CallAnswer(without_room_id(ev)), + Self::CallInvite(ev) => CallInvite(without_room_id(ev)), + Self::CallHangup(ev) => CallHangup(without_room_id(ev)), + Self::CallCandidates(ev) => CallCandidates(without_room_id(ev)), + Self::RoomEncrypted(ev) => RoomEncrypted(without_room_id(ev)), + Self::RoomMessage(ev) => RoomMessage(without_room_id(ev)), + Self::RoomMessageFeedback(ev) => RoomMessageFeedback(without_room_id(ev)), + Self::Sticker(ev) => Sticker(without_room_id(ev)), + Self::Custom(ev) => Custom(without_room_id(ev)), + Self::RoomRedaction(ev) => RoomRedaction(RedactionEventStub { + content: ev.content, + event_id: ev.event_id, + sender: ev.sender, + origin_server_ts: ev.origin_server_ts, + unsigned: ev.unsigned, + redacts: ev.redacts, + }), + } + } +}