commit 8590e3b1fc3d0e9c6d62096126dad2083666b273
parent 0a9e8a09ce25b5672b20f18e068d66136d756d28
Author: Jonas Platte <jplatte+git@posteo.de>
Date: Fri, 3 Jul 2020 20:32:09 +0200
Simplify random code
Diffstat:
6 files changed, 58 insertions(+), 78 deletions(-)
diff --git a/src/app/components/events/mod.rs b/src/app/components/events/mod.rs
@@ -28,14 +28,11 @@ pub fn get_sender_displayname(room: Room, event: MessageEvent) -> String {
}
pub fn get_sender_avatar(homeserver_url: Url, room: Room, event: MessageEvent) -> Option<String> {
- match room.members.get(&event.sender) {
- None => None,
- Some(member) => {
- let avatar_url_mxc = member.avatar_url.as_ref().map(ToString::to_string);
- match avatar_url_mxc {
- None => None,
- Some(v) => Some(get_media_download_url(&homeserver_url, v)),
- }
- }
- }
+ 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))
+ })
}
diff --git a/src/app/components/events/notice.rs b/src/app/components/events/notice.rs
@@ -68,20 +68,17 @@ impl Component for Notice {
let pure_content_clone = pure_content.clone();
let links: Vec<_> = finder.links(&pure_content_clone).collect();
- let content = if !links.is_empty() {
+ if !links.is_empty() {
for link in links {
let html_link = format!("<a href={}>{}</a>", link.as_str(), link.as_str());
pure_content.replace_range(link.start()..link.end(), &html_link);
}
- pure_content
- } else {
- pure_content
- };
+ }
if new_user {
let full_html = format!(
"<p style=\"opacity: .6;\"><displayname>{}: </displayname>{}</p>",
- sender_displayname, content
+ sender_displayname, pure_content
);
let js_text_event = {
let div = web_sys::window()
@@ -96,7 +93,7 @@ impl Component for Notice {
let node = Node::from(js_text_event);
VNode::VRef(node)
} else {
- let full_html = format!("<p style=\"opacity: .6;\">{}</p>", content);
+ let full_html = format!("<p style=\"opacity: .6;\">{}</p>", pure_content);
let js_text_event = {
let div = web_sys::window()
.unwrap()
diff --git a/src/app/components/events/text.rs b/src/app/components/events/text.rs
@@ -77,27 +77,16 @@ impl Component for Text {
pure_content
};
- if self.props.text_event.clone().unwrap().formatted.is_some() {
+ if let Some(formatted) = &self.props.text_event.as_ref().unwrap().formatted {
+ let format_slot;
let message = if new_user {
- format!(
+ format_slot = format!(
"<displayname>{}:</displayname> {}",
- sender_displayname,
- self.props
- .text_event
- .clone()
- .unwrap()
- .formatted
- .unwrap()
- .body
- )
+ sender_displayname, formatted.body
+ );
+ &format_slot
} else {
- self.props
- .text_event
- .clone()
- .unwrap()
- .formatted
- .unwrap()
- .body
+ &formatted.body
};
let js_text_event = {
let div = web_sys::window()
diff --git a/src/app/components/room_list/item.rs b/src/app/components/room_list/item.rs
@@ -46,7 +46,7 @@ impl Component for RoomItem {
let room = self.props.room.clone().unwrap();
// TODO placeholder for encrypted rooms
- let last_message = match self.props.room.as_ref().unwrap().messages.iter().last() {
+ let last_message = match room.messages.iter().last() {
None => "".to_string(),
Some(m) => {
if let MessageEventContent::Text(text_event) = &m.content {
@@ -57,6 +57,8 @@ impl Component for RoomItem {
}
};
+ let display_name = room.display_name();
+
html! {
<div class="room-list-item">
<a onclick=self.link.callback(move |e: MouseEvent| Msg::ChangeRoom(room.clone()))>
@@ -64,7 +66,7 @@ impl Component for RoomItem {
// TODO remove placeholder
<img class="avatar" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAARUlEQVRYhe3OMQ0AIADAMBKUowmBoIKMo0f/jrnX+dmoA4KCdUBQsA4ICtYBQcE6IChYBwQF64CgYB0QFKwDgoJ1QPC1C8gY0kSgNLTWAAAAAElFTkSuQmCC"/>
<div>
- <h5 class="name">{self.props.room.as_ref().unwrap().display_name()}</h5>
+ <h5 class="name">{display_name}</h5>
<p class="latest-msg">{last_message}</p>
</div>
</div>
diff --git a/src/app/matrix/sync.rs b/src/app/matrix/sync.rs
@@ -1,3 +1,4 @@
+use std::mem;
use std::sync::Arc;
use std::sync::Mutex;
use std::time::Duration;
@@ -124,47 +125,43 @@ impl Sync {
});
}
}
- if let MessageEventContent::Image(mut image_event) = event.clone().content {
- if image_event.url.is_some() {
- let new_url = Some(get_media_download_url(
+ if let MessageEventContent::Image(image_event) = &mut event.content {
+ if let Some(image_url) = &mut image_event.url {
+ let old_image_url = mem::take(image_url);
+ *image_url = get_media_download_url(
self.matrix_client.clone().homeserver(),
- image_event.url.unwrap(),
- ));
- image_event.url = new_url;
+ old_image_url,
+ );
}
- 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(info) = &mut image_event.info {
+ if let Some(thumbnail_url) = &mut info.thumbnail_url {
+ let old_thumbnail_url = mem::take(thumbnail_url);
+ *thumbnail_url = get_media_download_url(
self.matrix_client.clone().homeserver(),
- info.thumbnail_url.unwrap(),
- ));
- info.thumbnail_url = new_url;
+ old_thumbnail_url,
+ );
}
- 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 MessageEventContent::Video(video_event) = &mut event.content {
+ if let Some(video_url) = &mut video_event.url {
+ let old_video_url = mem::take(video_url);
+ *video_url = get_video_media_download_url(
self.matrix_client.clone().homeserver(),
- video_event.url.unwrap(),
- ));
- video_event.url = new_url;
+ old_video_url,
+ );
}
- if video_event.info.is_some() {
- let mut info = video_event.info.unwrap();
- if info.thumbnail_url.is_some() {
- let new_url = Some(get_media_download_url(
+
+ if let Some(info) = &mut video_event.info {
+ if let Some(thumbnail_url) = &mut info.thumbnail_url {
+ let old_thumbnail_url = mem::take(thumbnail_url);
+ *thumbnail_url = get_media_download_url(
self.matrix_client.clone().homeserver(),
- info.thumbnail_url.unwrap(),
- ));
- info.thumbnail_url = new_url;
+ old_thumbnail_url,
+ );
}
- video_event.info = Some(info);
}
- event.content = MessageEventContent::Video(video_event);
}
let serialized_event = EventJson::from(event);
diff --git a/src/app/views/main_view.rs b/src/app/views/main_view.rs
@@ -55,8 +55,8 @@ impl Component for MainView {
//noinspection RsTypeCheck
fn view(&self) -> Html {
- if self.state.current_room.is_none() {
- html! {
+ match &self.state.current_room {
+ None => html! {
<div class="uk-flex auto-scrollable-container uk-background-default" style="height: 100%">
<RoomList change_room_callback=self.link.callback(Msg::ChangeRoom)/>
@@ -66,13 +66,12 @@ impl Component for MainView {
</div>
</div>
</div>
- }
- } else if self.state.current_room.as_ref().unwrap().is_encrypted() {
- html! {
+ },
+ Some(room) if room.is_encrypted() => html! {
<div class="uk-flex auto-scrollable-container" style="height: 100%">
<RoomList change_room_callback=self.link.callback(Msg::ChangeRoom)/>
<div class="event-list">
- <div class="room-title"><h1>{ self.state.current_room.as_ref().unwrap().display_name() }</h1></div>
+ <div class="room-title"><h1>{ room.display_name() }</h1></div>
<h4>
{
tr!(
@@ -83,14 +82,13 @@ impl Component for MainView {
</h4>
</div>
</div>
- }
- } else {
- html! {
+ },
+ Some(room) => html! {
<div class="uk-flex auto-scrollable-container" style="height: 100%">
<RoomList change_room_callback=self.link.callback(Msg::ChangeRoom)/>
- <EventList current_room=self.state.current_room.as_ref().unwrap() />
+ <EventList current_room=room />
</div>
- }
+ },
}
}
}