commit bef55d05908e354e725be784cb7b8c48a466f200
parent 5fb621b033eca5022ad2dc72069fd365763b7eab
Author: Marcel <mtrnord1@gmail.com>
Date: Thu, 9 Jul 2020 16:36:46 +0200
Update sdk version
Took 1 hour 37 minutes
Diffstat:
9 files changed, 73 insertions(+), 82 deletions(-)
diff --git a/src/app/components/events/image.rs b/src/app/components/events/image.rs
@@ -50,7 +50,7 @@ impl Component for Image {
let sender_displayname = if new_user {
get_sender_displayname(&self.props.room, &self.props.event)
} else {
- "".to_string()
+ ""
};
if let Some(image_url) = &self.props.image_event.url {
diff --git a/src/app/components/events/mod.rs b/src/app/components/events/mod.rs
@@ -16,23 +16,19 @@ pub fn is_new_user(prev_event: Option<&MessageEvent>, event: &MessageEvent) -> b
}
}
-pub fn get_sender_displayname(room: &Room, event: &MessageEvent) -> String {
- match room.members.get(&event.sender) {
- None => event.sender.to_string(),
- Some(member) => member
- .display_name
- .as_ref()
- .map(ToString::to_string)
- .unwrap_or_else(|| event.sender.to_string()),
- }
+pub fn get_sender_displayname<'a>(room: &'a Room, event: &'a MessageEvent) -> &'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())
}
-pub fn get_sender_avatar(homeserver_url: Url, room: &Room, event: &MessageEvent) -> Option<String> {
- room.members.get(&event.sender).and_then(|member| {
- member
- .avatar_url
- .as_ref()
- .map(ToString::to_string)
- .map(|v| get_media_download_url(&homeserver_url, v))
- })
+pub fn get_sender_avatar<'a>(homeserver_url: &'a Url, room: &'a Room, event: &'a MessageEvent) -> 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.clone()?))
}
diff --git a/src/app/components/events/notice.rs b/src/app/components/events/notice.rs
@@ -53,7 +53,7 @@ impl Component for Notice {
let sender_displayname = if new_user {
get_sender_displayname(&self.props.room, &self.props.event)
} else {
- "".to_string()
+ ""
};
let mut pure_content = self.props.notice_event.body.clone();
diff --git a/src/app/components/events/text.rs b/src/app/components/events/text.rs
@@ -52,7 +52,7 @@ impl Component for Text {
let sender_displayname = if new_user {
get_sender_displayname(&self.props.room, &self.props.event)
} else {
- "".to_string()
+ ""
};
let mut pure_content = self.props.text_event.body.clone();
diff --git a/src/app/components/events/video.rs b/src/app/components/events/video.rs
@@ -50,7 +50,7 @@ impl Component for Video {
let sender_displayname = if new_user {
get_sender_displayname(&self.props.room, &self.props.event)
} else {
- "".to_string()
+ ""
};
let _caption = format!("{}: {}", sender_displayname, self.props.video_event.body);
diff --git a/src/app/matrix/mod.rs b/src/app/matrix/mod.rs
@@ -13,7 +13,6 @@ use matrix_sdk::{
EventJson,
},
identifiers::RoomId,
- js_int::UInt,
locks::RwLock,
Client, MessagesRequestBuilder, Room,
};
@@ -255,29 +254,25 @@ impl Agent for MatrixAgent {
Request::GetOldMessages((room_id, from)) => {
let agent = self.clone();
spawn_local(async move {
- let mut builder = &mut MessagesRequestBuilder::new();
- builder = builder.room_id(room_id.clone());
- if let Some(from) = from {
- builder = builder.from(from);
- } else {
- builder = builder.from(
- agent
- .matrix_client
- .clone()
- .unwrap()
- .sync_token()
- .await
- .unwrap(),
- );
- }
+ let mut builder = match from {
+ Some(from) => MessagesRequestBuilder::new(room_id.clone(), from),
+ None => MessagesRequestBuilder::new(room_id.clone(), agent
+ .matrix_client
+ .as_ref()
+ .unwrap()
+ .sync_token()
+ .await
+ .unwrap()),
+ };
let filter = RoomEventFilter {
types: Some(vec!["m.room.message".to_string()]),
..Default::default()
};
- builder = builder
+ // TODO find better way than cloning
+ builder = (*builder
.filter(filter)
.direction(Direction::Backward)
- .limit(UInt::new(30).unwrap());
+ .limit(30)).clone();
// TODO handle error gracefully
let messsages = agent
@@ -303,44 +298,42 @@ impl Agent for MatrixAgent {
// TODO deduplicate betweeen this and sync
if let RoomEvent::RoomMessage(mut event) = event {
if let MessageEventContent::Image(mut image_event) =
- event.clone().content
+ event.clone().content
{
- if image_event.url.is_some() {
- let new_url = Some(get_media_download_url(
+ if let Some(image_event_url) = image_event.url {
+ let new_url = get_media_download_url(
agent.matrix_client.as_ref().unwrap().homeserver(),
- image_event.url.unwrap(),
- ));
- image_event.url = new_url;
+ image_event_url,
+ );
+ image_event.url = Some(new_url.to_string());
}
- if image_event.info.is_some() {
- let mut info = image_event.info.unwrap();
- if info.thumbnail_url.is_some() {
- let new_url = Some(get_media_download_url(
+ if let Some(mut info) = image_event.info {
+ if let Some(thumbnail_url) = info.thumbnail_url.as_ref() {
+ let new_url = get_media_download_url(
agent.matrix_client.as_ref().unwrap().homeserver(),
- info.thumbnail_url.unwrap(),
- ));
- info.thumbnail_url = new_url;
+ (*thumbnail_url).clone(),
+ );
+ info.thumbnail_url = Some(new_url.to_string());
}
image_event.info = Some(info);
}
event.content = MessageEventContent::Image(image_event);
}
if let MessageEventContent::Video(mut video_event) = event.content {
- if video_event.url.is_some() {
- let new_url = Some(get_video_media_download_url(
+ if let Some(video_event_url) = video_event.url {
+ let new_url = get_video_media_download_url(
agent.matrix_client.as_ref().unwrap().homeserver(),
- video_event.url.unwrap(),
- ));
- video_event.url = new_url;
+ video_event_url,
+ );
+ video_event.url = Some(new_url.to_string());
}
- if video_event.info.is_some() {
- let mut info = video_event.info.unwrap();
- if info.thumbnail_url.is_some() {
+ if let Some(mut info) = video_event.info {
+ if let Some(thumbnail_url) = info.thumbnail_url {
let new_url = Some(get_media_download_url(
agent.matrix_client.as_ref().unwrap().homeserver(),
- info.thumbnail_url.unwrap(),
- ));
- info.thumbnail_url = new_url;
+ thumbnail_url,
+ )).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
@@ -106,11 +106,10 @@ impl Sync {
let (avatar_url, room_name, displayname) = {
let room = room.read().await;
-
(
- get_sender_avatar(homeserver_url, &room, &cloned_event),
+ get_sender_avatar(&homeserver_url, &room, &cloned_event),
room.display_name(),
- get_sender_displayname(&room, &cloned_event),
+ get_sender_displayname(&room, &cloned_event).to_string(),
)
};
@@ -132,7 +131,7 @@ impl Sync {
*image_url = get_media_download_url(
self.matrix_client.clone().homeserver(),
old_image_url,
- );
+ ).to_string();
}
if let Some(info) = &mut image_event.info {
@@ -141,7 +140,7 @@ impl Sync {
*thumbnail_url = get_media_download_url(
self.matrix_client.clone().homeserver(),
old_thumbnail_url,
- );
+ ).to_string();
}
}
}
@@ -151,7 +150,7 @@ impl Sync {
*video_url = get_video_media_download_url(
self.matrix_client.clone().homeserver(),
old_video_url,
- );
+ ).to_string();
}
if let Some(info) = &mut video_event.info {
@@ -160,7 +159,7 @@ impl Sync {
*thumbnail_url = get_media_download_url(
self.matrix_client.clone().homeserver(),
old_thumbnail_url,
- );
+ ).to_string();
}
}
}
diff --git a/src/app/matrix/types.rs b/src/app/matrix/types.rs
@@ -1,6 +1,6 @@
use url::Url;
-pub fn get_media_download_url(homeserver: &Url, mxc_url: String) -> String {
+pub fn get_media_download_url(homeserver: &Url, mxc_url: String) -> Url {
let url_parts_raw = mxc_url.replace("mxc://", "");
let url_parts: Vec<&str> = url_parts_raw.split('/').collect();
let server_name = (*url_parts.first().unwrap()).to_string();
@@ -11,10 +11,10 @@ pub fn get_media_download_url(homeserver: &Url, mxc_url: String) -> String {
);
let mut new_url = homeserver.clone();
new_url.set_path(new_path.as_str());
- new_url.to_string()
+ new_url
}
-pub fn get_video_media_download_url(homeserver: &Url, mxc_url: String) -> String {
+pub fn get_video_media_download_url(homeserver: &Url, mxc_url: String) -> Url {
let url_parts_raw = mxc_url.replace("mxc://", "");
let url_parts: Vec<&str> = url_parts_raw.split('/').collect();
let server_name = (*url_parts.first().unwrap()).to_string();
@@ -25,5 +25,5 @@ pub fn get_video_media_download_url(homeserver: &Url, mxc_url: String) -> String
);
let mut new_url = homeserver.clone();
new_url.set_path(new_path.as_str());
- new_url.to_string()
+ new_url
}
diff --git a/src/utils/notifications.rs b/src/utils/notifications.rs
@@ -1,16 +1,17 @@
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use web_sys::{Notification, NotificationOptions, NotificationPermission};
+use url::Url;
#[derive(Clone)]
pub(crate) struct Notifications {
- avatar: Option<String>,
+ avatar: Option<Url>,
displayname: String,
content: String,
}
impl Notifications {
- pub fn new(avatar: Option<String>, displayname: String, content: String) -> Self {
+ pub fn new(avatar: Option<Url>, displayname: String, content: String) -> Self {
Notifications {
avatar,
displayname,
@@ -44,12 +45,14 @@ impl Notifications {
}
fn show_actual(&self) {
- let mut options = NotificationOptions::new() as NotificationOptions;
- let options = options.body(&self.content).tag("daydream") as &mut NotificationOptions;
- let options = if self.avatar.is_some() {
- options.icon(self.avatar.as_ref().unwrap())
- } else {
- options
+ let mut options_0 = NotificationOptions::new() as NotificationOptions;
+ let options_1 = options_0.body(&self.content).tag("daydream") as &mut NotificationOptions;
+ let options = match self.clone().avatar {
+ None => options_1,
+ Some(avatar) => {
+ let url = avatar.to_string();
+ options_1.icon(&url)
+ },
};
if let Err(_e) = Notification::new_with_options(&self.displayname, &options) {
// Noop to please clippy/rust compiler