commit 0c787d4938f1f8e227ac4daf262875e4dfdaa0de
parent a51af1b923c57868391034d1fdae5034b8224599
Author: Jonas Platte <jplatte+git@posteo.de>
Date: Fri, 3 Jul 2020 21:39:34 +0200
Make some properties not `Option`al
Diffstat:
6 files changed, 56 insertions(+), 106 deletions(-)
diff --git a/src/app/components/event_list.rs b/src/app/components/event_list.rs
@@ -36,8 +36,7 @@ pub enum Msg {
#[derive(Clone, PartialEq, Properties, Debug)]
pub struct Props {
- #[prop_or_default]
- pub current_room: Option<Rc<Room>>,
+ pub current_room: Rc<Room>,
}
impl Component for EventList {
@@ -52,11 +51,9 @@ impl Component for EventList {
events: Default::default(),
};
- if props.current_room.is_some() {
- let room_id = props.current_room.as_ref().unwrap().room_id.clone();
- if !state.events.contains_key(&room_id) {
- matrix_agent.send(Request::GetOldMessages((room_id, None)));
- }
+ let room_id = props.current_room.room_id.clone();
+ if !state.events.contains_key(&room_id) {
+ matrix_agent.send(Request::GetOldMessages((room_id, None)));
}
EventList {
@@ -80,15 +77,14 @@ impl Component for EventList {
.any(|x| x.event_id == msg.event_id))
{
self.state.events.get_mut(&room_id).unwrap().push(msg);
- room_id
- == self.props.current_room.as_ref().unwrap().room_id
+ room_id == self.props.current_room.room_id
} else {
false
}
} else {
let msgs = vec![msg];
self.state.events.insert(room_id.clone(), msgs);
- room_id == self.props.current_room.as_ref().unwrap().room_id
+ room_id == self.props.current_room.room_id
}
} else {
false
@@ -121,7 +117,7 @@ impl Component for EventList {
Msg::SendMessage(message) => {
info!("Sending Message");
self.matrix_agent.send(Request::SendMessage((
- self.props.current_room.as_ref().unwrap().room_id.clone(),
+ self.props.current_room.room_id.clone(),
message,
)));
false
@@ -132,13 +128,12 @@ impl Component for EventList {
fn change(&mut self, props: Self::Properties) -> bool {
if self.props != props {
- if props.current_room.is_some() {
- let room_id = props.current_room.as_ref().unwrap().room_id.clone();
- if !self.state.events.contains_key(&room_id) {
- self.matrix_agent
- .send(Request::GetOldMessages((room_id, None)));
- }
+ let room_id = props.current_room.room_id.clone();
+ if !self.state.events.contains_key(&room_id) {
+ self.matrix_agent
+ .send(Request::GetOldMessages((room_id, None)));
}
+
self.props = props;
true
} else {
@@ -149,14 +144,14 @@ impl Component for EventList {
fn view(&self) -> Html {
return html! {
<div class="event-list">
- <div class="room-title"><h1>{ self.props.current_room.as_ref().unwrap().display_name() }</h1></div>
+ <div class="room-title"><h1>{ self.props.current_room.display_name() }</h1></div>
<div class="scrollable" style="height: auto; flex-grow: 1;">
<div class="message-container">
{
- if self.state.events.contains_key(&self.props.current_room.as_ref().unwrap().room_id) {
- let events = self.state.events[&self.props.current_room.as_ref().unwrap().room_id].clone();
+ if self.state.events.contains_key(&self.props.current_room.room_id) {
+ let events = self.state.events[&self.props.current_room.room_id].clone();
let mut elements: Vec<Html> = Vec::new();
- for (pos, event) in self.state.events[&self.props.current_room.as_ref().unwrap().room_id].iter().enumerate() {
+ for (pos, event) in self.state.events[&self.props.current_room.room_id].iter().enumerate() {
if pos == 0 {
elements.push(self.get_event(None, event));
} else {
@@ -188,9 +183,9 @@ impl EventList {
html! {
<Text
prev_event=prev_event.clone()
- event=Some(event.clone())
- room=Some(self.props.current_room.clone().unwrap())
- text_event=Some(text_event.clone())
+ event=event.clone()
+ room=self.props.current_room.clone()
+ text_event=text_event.clone()
/>
}
}
@@ -198,9 +193,9 @@ impl EventList {
html! {
<Notice
prev_event=prev_event.clone()
- event=Some(event.clone())
- room=Some(self.props.current_room.clone().unwrap())
- notice_event=Some(notice_event.clone())
+ event=event.clone()
+ room=self.props.current_room.clone()
+ notice_event=notice_event.clone()
/>
}
}
@@ -208,9 +203,9 @@ impl EventList {
html! {
<Image
prev_event=prev_event.clone()
- event=Some(event.clone())
- room=Some(self.props.current_room.clone().unwrap())
- image_event=Some(image_event.clone())
+ event=event.clone()
+ room=self.props.current_room.clone()
+ image_event=image_event.clone()
/>
}
}
@@ -218,9 +213,9 @@ impl EventList {
html! {
<Video
prev_event=prev_event.clone()
- event=Some(event.clone())
- room=Some(self.props.current_room.clone().unwrap())
- video_event=Some(video_event.clone())
+ event=event.clone()
+ room=self.props.current_room.clone()
+ video_event=video_event.clone()
/>
}
}
diff --git a/src/app/components/events/image.rs b/src/app/components/events/image.rs
@@ -16,12 +16,9 @@ pub(crate) struct Image {
pub struct Props {
#[prop_or_default]
pub prev_event: Option<MessageEvent>,
- #[prop_or_default]
- pub event: Option<MessageEvent>,
- #[prop_or_default]
- pub image_event: Option<ImageMessageEventContent>,
- #[prop_or_default]
- pub room: Option<Rc<Room>>,
+ pub event: MessageEvent,
+ pub image_event: ImageMessageEventContent,
+ pub room: Rc<Room>,
}
impl Component for Image {
@@ -49,25 +46,17 @@ 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.as_ref().unwrap(),
- );
+ let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
let sender_displayname = if new_user {
- get_sender_displayname(
- self.props.room.as_ref().unwrap(),
- self.props.event.as_ref().unwrap(),
- )
+ get_sender_displayname(&self.props.room, &self.props.event)
} else {
"".to_string()
};
- if let Some(image_url) = &self.props.image_event.as_ref().unwrap().url {
+ if let Some(image_url) = &self.props.image_event.url {
let thumbnail = self
.props
.image_event
- .as_ref()
- .unwrap()
.info
.as_ref()
.unwrap()
diff --git a/src/app/components/events/notice.rs b/src/app/components/events/notice.rs
@@ -19,12 +19,9 @@ pub(crate) struct Notice {
pub struct Props {
#[prop_or_default]
pub prev_event: Option<MessageEvent>,
- #[prop_or_default]
- pub event: Option<MessageEvent>,
- #[prop_or_default]
- pub notice_event: Option<NoticeMessageEventContent>,
- #[prop_or_default]
- pub room: Option<Rc<Room>>,
+ pub event: MessageEvent,
+ pub notice_event: NoticeMessageEventContent,
+ pub room: Rc<Room>,
}
impl Component for Notice {
@@ -52,20 +49,14 @@ 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.as_ref().unwrap(),
- );
+ let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
let sender_displayname = if new_user {
- get_sender_displayname(
- self.props.room.as_ref().unwrap(),
- self.props.event.as_ref().unwrap(),
- )
+ get_sender_displayname(&self.props.room, &self.props.event)
} else {
"".to_string()
};
- let mut pure_content = self.props.notice_event.as_ref().unwrap().body.clone();
+ let mut pure_content = self.props.notice_event.body.clone();
let finder = LinkFinder::new();
let pure_content_clone = pure_content.clone();
let links: Vec<_> = finder.links(&pure_content_clone).collect();
diff --git a/src/app/components/events/text.rs b/src/app/components/events/text.rs
@@ -18,12 +18,9 @@ pub struct Text {
pub struct Props {
#[prop_or_default]
pub prev_event: Option<MessageEvent>,
- #[prop_or_default]
- pub event: Option<MessageEvent>,
- #[prop_or_default]
- pub text_event: Option<TextMessageEventContent>,
- #[prop_or_default]
- pub room: Option<Rc<Room>>,
+ pub event: MessageEvent,
+ pub text_event: TextMessageEventContent,
+ pub room: Rc<Room>,
}
impl Component for Text {
@@ -51,20 +48,14 @@ 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.as_ref().unwrap(),
- );
+ let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
let sender_displayname = if new_user {
- get_sender_displayname(
- self.props.room.as_ref().unwrap(),
- self.props.event.as_ref().unwrap(),
- )
+ get_sender_displayname(&self.props.room, &self.props.event)
} else {
"".to_string()
};
- let mut pure_content = self.props.text_event.as_ref().unwrap().body.clone();
+ let mut pure_content = self.props.text_event.body.clone();
let finder = LinkFinder::new();
let pure_content_clone = pure_content.clone();
let links: Vec<_> = finder.links(&pure_content_clone).collect();
@@ -79,7 +70,7 @@ impl Component for Text {
pure_content
};
- if let Some(formatted) = &self.props.text_event.as_ref().unwrap().formatted {
+ if let Some(formatted) = &self.props.text_event.formatted {
let format_slot;
let message = if new_user {
format_slot = format!(
diff --git a/src/app/components/events/video.rs b/src/app/components/events/video.rs
@@ -16,12 +16,9 @@ pub(crate) struct Video {
pub struct Props {
#[prop_or_default]
pub prev_event: Option<MessageEvent>,
- #[prop_or_default]
- pub event: Option<MessageEvent>,
- #[prop_or_default]
- pub video_event: Option<VideoMessageEventContent>,
- #[prop_or_default]
- pub room: Option<Rc<Room>>,
+ pub event: MessageEvent,
+ pub video_event: VideoMessageEventContent,
+ pub room: Rc<Room>,
}
impl Component for Video {
@@ -49,31 +46,19 @@ 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.as_ref().unwrap(),
- );
+ let new_user = is_new_user(self.props.prev_event.as_ref(), &self.props.event);
let sender_displayname = if new_user {
- get_sender_displayname(
- self.props.room.as_ref().unwrap(),
- self.props.event.as_ref().unwrap(),
- )
+ get_sender_displayname(&self.props.room, &self.props.event)
} else {
"".to_string()
};
- let _caption = format!(
- "{}: {}",
- sender_displayname,
- self.props.video_event.as_ref().unwrap().body
- );
+ let _caption = format!("{}: {}", sender_displayname, self.props.video_event.body);
- if let Some(video_url) = self.props.video_event.as_ref().unwrap().url.as_ref() {
+ if let Some(video_url) = self.props.video_event.url.as_ref() {
let thumbnail = self
.props
.video_event
- .as_ref()
- .unwrap()
.info
.as_ref()
.unwrap()
diff --git a/src/app/components/room_list/item.rs b/src/app/components/room_list/item.rs
@@ -15,8 +15,7 @@ pub enum Msg {
#[derive(Clone, Properties, Debug, PartialEq)]
pub struct Props {
- #[prop_or_default]
- pub room: Option<Rc<Room>>,
+ pub room: Rc<Room>,
#[prop_or_default]
pub change_room_callback: Callback<RoomId>,
@@ -45,7 +44,7 @@ impl Component for RoomItem {
//noinspection RsTypeCheck
fn view(&self) -> Html {
- let room = self.props.room.clone().unwrap();
+ let room = self.props.room.clone();
// TODO placeholder for encrypted rooms
let last_message = match room.messages.iter().last() {