commit d820a910e7c91180c225b097d4c237c751063384
parent 7b90ee745d7d2805c7edcd9eb408b8043dfdde33
Author: Marcel <mtrnord1@gmail.com>
Date: Fri, 10 Jul 2020 18:20:53 +0200
Some more migration to the monorepo
Took 26 minutes
Diffstat:
8 files changed, 74 insertions(+), 62 deletions(-)
diff --git a/src/app/components/event_list.rs b/src/app/components/event_list.rs
@@ -2,7 +2,10 @@ use std::{collections::HashMap, rc::Rc};
use log::*;
use matrix_sdk::{
- events::{room::message::MessageEventContent, AnyMessageEventContent, AnyMessageEventStub},
+ events::{
+ room::message::MessageEventContent, AnyMessageEventContent, AnyMessageEventStub,
+ MessageEvent
+ },
identifiers::RoomId,
Room,
};
diff --git a/src/app/components/events/image.rs b/src/app/components/events/image.rs
@@ -1,11 +1,8 @@
use std::rc::Rc;
-use crate::app::components::events::{get_sender_displayname, is_new_user};
+use crate::app::components::events::{RoomExt, EventExt};
use matrix_sdk::{
- events::{
- room::message::{ImageMessageEventContent, MessageEvent},
- AnyMessageEventStub,
- },
+ events::{room::message::ImageMessageEventContent, AnyMessageEventStub},
Room,
};
use rand::random;
@@ -49,9 +46,9 @@ impl Component for Image {
//noinspection RsTypeCheck
fn view(&self) -> Html {
- let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
+ let new_user = self.props.event.is_new_user(self.props.prev_event.as_ref());
let sender_displayname = if new_user {
- get_sender_displayname(&self.props.room, &self.props.event)
+ self.props.room.get_sender_displayname(&self.props.event)
} else {
""
};
diff --git a/src/app/components/events/mod.rs b/src/app/components/events/mod.rs
@@ -9,34 +9,53 @@ pub mod notice;
pub mod text;
pub mod video;
-pub fn is_new_user(prev_event: Option<&AnyMessageEventStub>, event: &AnyMessageEventStub) -> bool {
- if let Some(prev_event) = prev_event {
- prev_event.sender() != event.sender()
- } else {
- true
+pub trait EventExt {
+ fn is_new_user(&self, prev_event: Option<&AnyMessageEventStub>) -> bool;
+}
+
+impl EventExt for AnyMessageEventStub {
+ fn is_new_user(&self, prev_event: Option<&AnyMessageEventStub>) -> bool {
+ if let Some(prev_event) = prev_event {
+ prev_event.sender() != self.sender()
+ } else {
+ true
+ }
}
}
-pub fn get_sender_displayname<'a>(room: &'a Room, event: &'a AnyMessageEventStub) -> &'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_str())
+pub trait RoomExt {
+ fn get_sender_displayname<'a>(&self, event: &'a AnyMessageEventStub) -> &'a str;
+ fn get_sender_avatar<'a>(
+ &self,
+ homeserver_url: &'a Url,
+ event: &'a AnyMessageEventStub,
+ ) -> Option<Url>;
}
-pub fn get_sender_avatar<'a>(
- homeserver_url: &'a Url,
- room: &'a Room,
- event: &'a AnyMessageEventStub,
-) -> Option<Url> {
- let member = room
- .joined_members
- .get(&event.sender())
- .or_else(|| room.invited_members.get(&event.sender()))?;
-
- Some(get_media_download_url(
- homeserver_url,
- member.avatar_url.as_deref()?,
- ))
+impl RoomExt for Room {
+ fn get_sender_displayname<'a>(&self, event: &'a AnyMessageEventStub) -> &'a str {
+ self.joined_members
+ .get(&event.sender())
+ .or_else(|| self.invited_members.get(&event.sender()))
+ .and_then(|member| member.display_name.as_deref())
+ .unwrap_or_else(|| event.sender().as_str())
+ }
+
+ fn get_sender_avatar<'a>(
+ &self,
+ homeserver_url: &'a Url,
+ event: &'a AnyMessageEventStub,
+ ) -> Option<Url> {
+ let member = self
+ .joined_members
+ .get(&event.sender())
+ .or_else(|| self.invited_members.get(&event.sender()))?;
+
+ Some(get_media_download_url(
+ homeserver_url,
+ member.avatar_url.as_deref()?,
+ ))
+ }
+
}
+
diff --git a/src/app/components/events/notice.rs b/src/app/components/events/notice.rs
@@ -2,17 +2,14 @@ use std::rc::Rc;
use linkify::LinkFinder;
use matrix_sdk::{
- events::{
- room::message::{MessageEvent, NoticeMessageEventContent},
- AnyMessageEventStub,
- },
+ events::{room::message::NoticeMessageEventContent, AnyMessageEventStub},
Room,
};
use web_sys::Node;
use yew::prelude::*;
use yew::virtual_dom::VNode;
-use crate::app::components::events::{get_sender_displayname, is_new_user};
+use crate::app::components::events::{RoomExt, EventExt};
pub(crate) struct Notice {
props: Props,
@@ -52,9 +49,9 @@ impl Component for Notice {
//noinspection RsTypeCheck
fn view(&self) -> Html {
- let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
+ let new_user = self.props.event.is_new_user(self.props.prev_event.as_ref());
let sender_displayname = if new_user {
- get_sender_displayname(&self.props.room, &self.props.event)
+ self.props.room.get_sender_displayname(&self.props.event)
} else {
""
};
diff --git a/src/app/components/events/text.rs b/src/app/components/events/text.rs
@@ -1,12 +1,9 @@
use std::rc::Rc;
-use crate::app::components::events::{get_sender_displayname, is_new_user};
+use crate::app::components::events::{RoomExt, EventExt};
use linkify::LinkFinder;
use matrix_sdk::{
- events::{
- room::message::{MessageEvent, TextMessageEventContent},
- AnyMessageEventStub,
- },
+ events::{room::message::TextMessageEventContent, AnyMessageEventStub},
Room,
};
use web_sys::Node;
@@ -51,9 +48,9 @@ impl Component for Text {
//noinspection RsTypeCheck
fn view(&self) -> Html {
- let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
+ let new_user = self.props.event.is_new_user(self.props.prev_event.as_ref());
let sender_displayname = if new_user {
- get_sender_displayname(&self.props.room, &self.props.event)
+ self.props.room.get_sender_displayname(&self.props.event)
} else {
""
};
diff --git a/src/app/components/events/video.rs b/src/app/components/events/video.rs
@@ -1,11 +1,8 @@
use std::rc::Rc;
-use crate::app::components::events::{get_sender_displayname, is_new_user};
+use crate::app::components::events::{RoomExt, EventExt};
use matrix_sdk::{
- events::{
- room::message::{MessageEvent, VideoMessageEventContent},
- AnyMessageEventStub,
- },
+ events::{room::message::VideoMessageEventContent, AnyMessageEventStub},
Room,
};
use rand::random;
@@ -49,9 +46,9 @@ impl Component for Video {
//noinspection RsTypeCheck
fn view(&self) -> Html {
- let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
+ let new_user = self.props.event.is_new_user(self.props.prev_event.as_ref());
let sender_displayname = if new_user {
- get_sender_displayname(&self.props.room, &self.props.event)
+ self.props.room.get_sender_displayname(&self.props.event)
} else {
""
};
diff --git a/src/app/matrix/mod.rs b/src/app/matrix/mod.rs
@@ -9,7 +9,7 @@ use matrix_sdk::{
FormattedBody, MessageEvent, MessageEventContent, MessageFormat,
TextMessageEventContent,
},
- AnyMessageEventStub, AnyRoomEvent, EventJson, AnyMessageEvent,
+ AnyMessageEvent, AnyMessageEventStub, AnyRoomEvent, EventJson,
},
identifiers::RoomId,
locks::RwLock,
@@ -275,7 +275,7 @@ impl Agent for MatrixAgent {
.filter(filter)
.direction(Direction::Backward)
.limit(30))
- .clone();
+ .clone();
// TODO handle error gracefully
let messsages = agent
@@ -299,9 +299,11 @@ impl Agent for MatrixAgent {
for event in deserialized_events.into_iter().rev() {
// TODO deduplicate betweeen this and sync
- if let AnyRoomEvent::Message(AnyMessageEvent::RoomMessage(mut event)) = event {
+ if let AnyRoomEvent::Message(AnyMessageEvent::RoomMessage(mut event)) =
+ event
+ {
if let MessageEventContent::Image(mut image_event) =
- event.clone().content
+ event.clone().content
{
if let Some(image_event_url) = image_event.url {
let new_url = get_media_download_url(
@@ -336,7 +338,7 @@ impl Agent for MatrixAgent {
agent.matrix_client.as_ref().unwrap().homeserver(),
&thumbnail_url,
))
- .unwrap();
+ .unwrap();
info.thumbnail_url = Some(new_url.to_string());
}
video_event.info = Some(info);
diff --git a/src/app/matrix/sync.rs b/src/app/matrix/sync.rs
@@ -19,7 +19,7 @@ use yew::Callback;
use lazy_static::lazy_static;
-use crate::app::components::events::{get_sender_avatar, get_sender_displayname};
+use crate::app::components::events::{RoomExt};
use crate::app::matrix::types::{get_media_download_url, get_video_media_download_url};
use crate::app::matrix::Response;
use crate::utils::notifications::Notifications;
@@ -107,9 +107,9 @@ impl Sync {
let (avatar_url, room_name, displayname) = {
let room = room.read().await;
(
- get_sender_avatar(&homeserver_url, &room, &cloned_event),
+ room.get_sender_avatar(&homeserver_url, &AnyMessageEventStub::RoomMessage(cloned_event)),
room.display_name(),
- get_sender_displayname(&room, &cloned_event).to_string(),
+ room.get_sender_displayname(&AnyMessageEventStub::RoomMessage(cloned_event)).to_string(),
)
};