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:
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>
}
}