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 a967486a225b3ad800a980e772920c8083ceb8a3
parent 08043c7675856803b5a0976a71effc84edc246de
Author: Marcel <mtrnord1@gmail.com>
Date:   Wed, 27 May 2020 02:13:54 +0200

Also show displayname

Took 19 minutes

Diffstat:
Msrc/app/matrix/sync.rs | 36+++++++++++++++++++++++++-----------
Msrc/app/matrix/types.rs | 1+
Msrc/app/views/main_view.rs | 6+++---
3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/src/app/matrix/sync.rs b/src/app/matrix/sync.rs @@ -6,8 +6,11 @@ use matrix_sdk::{ events::collections::all::RoomEvent, events::room::message::{MessageEvent, MessageEventContent, TextMessageEventContent}, identifiers::RoomId, - Client, SyncSettings, + Client, Room, SyncSettings, }; +use futures::AsyncReadExt; +use std::sync::Arc; +use futures_locks::RwLock; pub struct Sync<F> where @@ -51,22 +54,33 @@ where async fn on_room_message(&self, room_id: &RoomId, event: RoomEvent) { // TODO handle all messages... - let msg_body = if let RoomEvent::RoomMessage(MessageEvent { + if let RoomEvent::RoomMessage(MessageEvent { content: MessageEventContent::Text(TextMessageEventContent { body: msg_body, .. }), + sender, .. }) = event { - msg_body.clone() + let name = { + let room: Arc<RwLock<Room>> = self.matrix_client.get_joined_room(room_id).await.unwrap(); + let room = room.read().await; + let member = room.members.get(&sender).unwrap(); + member + .display_name + .as_ref() + .map(ToString::to_string) + .unwrap_or(sender.to_string()) + }; + + let wrapper = MessageWrapper { + sender_displayname: name.clone(), + room_id: room_id.clone(), + content: msg_body.clone(), + }; + + let resp = Response::Sync(wrapper); + (self.callback)(resp); } else { return; }; - - let wrapper = MessageWrapper { - room_id: room_id.clone(), - content: msg_body, - }; - - let resp = Response::Sync(wrapper); - (self.callback)(resp); } } diff --git a/src/app/matrix/types.rs b/src/app/matrix/types.rs @@ -12,6 +12,7 @@ pub struct SmallRoom { #[derive(Serialize, Deserialize, Debug, Clone, Hash, Eq, PartialEq)] pub struct MessageWrapper { + pub(crate) sender_displayname: String, pub(crate) room_id: RoomId, // TODO use ruma structs pub(crate) content: String, diff --git a/src/app/views/main_view.rs b/src/app/views/main_view.rs @@ -109,7 +109,7 @@ impl Component for MainView { <div class="container uk-height-1-1 uk-width-5-6 uk-padding"> <h1>{ self.state.rooms.iter().filter(|(id, _)| **id == self.state.current_room.clone().unwrap()).map(|(_, room)| room.name.clone()).collect::<String>() }</h1> <div class="scrollable uk-height-1-1"> - { self.state.events.iter().filter(|x| x.room_id == self.state.current_room.clone().unwrap()).map(|event| self.get_event(event.content.clone())).collect::<Html>() } + { self.state.events.iter().filter(|x| x.room_id == self.state.current_room.clone().unwrap()).map(|event| self.get_event(event.clone())).collect::<Html>() } </div> </div> </div> @@ -128,9 +128,9 @@ impl Component for MainView { } impl MainView { - fn get_event(&self, event: String) -> Html { + fn get_event(&self, event: MessageWrapper) -> Html { html! { - <p>{event}</p> + <p>{event.sender_displayname.clone()}{": "}{event.content.clone()}</p> } }