daydream.meta

Issues/PRs archive for daydream-mx/Daydream
git clone git://archive.git.mtrnord.blog/daydream-mx/daydream.meta.git
Log | Files | Refs

23.diff (8786B)


      1 diff --git a/src/app/components/event_list.rs b/src/app/components/event_list.rs
      2 index 3c540cf..732bf3d 100644
      3 --- a/src/app/components/event_list.rs
      4 +++ b/src/app/components/event_list.rs
      5 @@ -7,7 +7,7 @@ use matrix_sdk::{
      6      identifiers::RoomId,
      7      Room,
      8  };
      9 -use yew::prelude::*;
     10 +use yew::{prelude::*, virtual_dom::VList};
     11  
     12  use crate::app::components::{
     13      events::{image::Image, notice::Notice, text::Text, video::Video},
     14 @@ -144,33 +144,40 @@ impl Component for EventList {
     15      }
     16  
     17      fn view(&self) -> Html {
     18 -        return html! {
     19 +        let events = if self
     20 +            .state
     21 +            .events
     22 +            .contains_key(&self.props.current_room.room_id)
     23 +        {
     24 +            let events = &self.state.events[&self.props.current_room.room_id];
     25 +
     26 +            let mut html_nodes = VList::new();
     27 +            if let Some(event) = events.first() {
     28 +                html_nodes.add_child(self.get_event(None, event));
     29 +            }
     30 +            html_nodes.add_children(
     31 +                events
     32 +                    .windows(2)
     33 +                    .map(|e| self.get_event(Some(&e[0]), &e[1])),
     34 +            );
     35 +
     36 +            html_nodes.into()
     37 +        } else {
     38 +            html! {}
     39 +        };
     40 +
     41 +        html! {
     42              <div class="event-list">
     43                  <div class="room-title"><div><h1>{ self.props.current_room.display_name() }</h1></div></div>
     44                  <div class="scrollable message-scrollarea">
     45                      <div class="message-container">
     46 -                        {
     47 -                            if self.state.events.contains_key(&self.props.current_room.room_id) {
     48 -                                let events = self.state.events[&self.props.current_room.room_id].clone();
     49 -                                let mut elements: Vec<Html> = Vec::new();
     50 -                                for (pos, event) in self.state.events[&self.props.current_room.room_id].iter().enumerate() {
     51 -                                    if pos == 0 {
     52 -                                        elements.push(self.get_event(None, event));
     53 -                                    } else {
     54 -                                        elements.push(self.get_event(Some(events[pos - 1].clone()), event));
     55 -                                    }
     56 -                                }
     57 -                                elements.into_iter().collect::<Html>()
     58 -                            } else {
     59 -                                html! {}
     60 -                            }
     61 -                        }
     62 +                        { events }
     63                          <div id="anchor"></div>
     64                      </div>
     65                  </div>
     66                  <Input on_submit=&self.on_submit/>
     67              </div>
     68 -        };
     69 +        }
     70      }
     71  }
     72  
     73 @@ -179,7 +186,7 @@ impl EventList {
     74      //noinspection RsTypeCheck
     75      fn get_event(
     76          &self,
     77 -        prev_event: Option<AnyMessageEventStub>,
     78 +        prev_event: Option<&AnyMessageEventStub>,
     79          event: &AnyMessageEventStub,
     80      ) -> Html {
     81          // TODO make encryption supported
     82 @@ -189,7 +196,7 @@ impl EventList {
     83                  MessageEventContent::Text(text_event) => {
     84                      html! {
     85                          <Text
     86 -                            prev_event=prev_event.clone()
     87 +                            prev_event=prev_event.cloned()
     88                              event=event.clone()
     89                              room=self.props.current_room.clone()
     90                              text_event=text_event.clone()
     91 @@ -199,7 +206,7 @@ impl EventList {
     92                  MessageEventContent::Notice(notice_event) => {
     93                      html! {
     94                          <Notice
     95 -                            prev_event=prev_event.clone()
     96 +                            prev_event=prev_event.cloned()
     97                              event=event.clone()
     98                              room=self.props.current_room.clone()
     99                              notice_event=notice_event.clone()
    100 @@ -209,7 +216,7 @@ impl EventList {
    101                  MessageEventContent::Image(image_event) => {
    102                      html! {
    103                          <Image
    104 -                            prev_event=prev_event.clone()
    105 +                            prev_event=prev_event.cloned()
    106                              event=event.clone()
    107                              room=self.props.current_room.clone()
    108                              image_event=image_event.clone()
    109 @@ -219,7 +226,7 @@ impl EventList {
    110                  MessageEventContent::Video(video_event) => {
    111                      html! {
    112                          <Video
    113 -                            prev_event=prev_event.clone()
    114 +                            prev_event=prev_event.cloned()
    115                              event=event.clone()
    116                              room=self.props.current_room.clone()
    117                              video_event=video_event.clone()
    118 diff --git a/src/app/components/events/image.rs b/src/app/components/events/image.rs
    119 index 1adc7fe..7ad8264 100644
    120 --- a/src/app/components/events/image.rs
    121 +++ b/src/app/components/events/image.rs
    122 @@ -4,7 +4,6 @@ use crate::app::components::events::{EventExt, RoomExt};
    123  use matrix_sdk::{
    124      events::{room::message::ImageMessageEventContent, AnyMessageEventStub},
    125      Room,
    126 -    js_int::UInt
    127  };
    128  use rand::random;
    129  use yew::prelude::*;
    130 @@ -72,8 +71,8 @@ impl Component for Image {
    131                  html! {
    132                      <div>
    133                          <p><displayname>{sender_displayname}{": "}</displayname></p>
    134 -                        <a href={lightbox_href_full.clone()}><div class="thumbnail-container"><img src=thumbnail/></div></a>
    135 -                        <div class="lightbox short-animate" id={lightbox_id_full.clone()}>
    136 +                        <a href=lightbox_href_full><div class="thumbnail-container"><img src=thumbnail/></div></a>
    137 +                        <div class="lightbox short-animate" id=lightbox_id_full>
    138                              <img class="long-animate" src=image_url/>
    139                          </div>
    140                          <div id="lightbox-controls" class="short-animate">
    141 @@ -84,8 +83,8 @@ impl Component for Image {
    142              } else {
    143                  html! {
    144                      <div>
    145 -                        <a href={lightbox_href_full.clone()}><img src=thumbnail/></a>
    146 -                        <div class="lightbox short-animate" id={lightbox_id_full.clone()}>
    147 +                        <a href=lightbox_href_full><img src=thumbnail/></a>
    148 +                        <div class="lightbox short-animate" id=lightbox_id_full>
    149                              <img class="long-animate" src=image_url/>
    150                          </div>
    151                          <div id="lightbox-controls" class="short-animate">
    152 diff --git a/src/app/components/input.rs b/src/app/components/input.rs
    153 index 3ba40a4..ce11c76 100644
    154 --- a/src/app/components/input.rs
    155 +++ b/src/app/components/input.rs
    156 @@ -46,7 +46,7 @@ impl Component for Input {
    157                  if data.key() == "Enter" {
    158                      self.props
    159                          .on_submit
    160 -                        .emit(self.state.value.as_ref().unwrap_or(&"".to_string()).clone());
    161 +                        .emit(self.state.value.as_deref().unwrap_or("").to_owned());
    162                      self.state.value = None;
    163                      return true;
    164                  }
    165 @@ -64,7 +64,7 @@ impl Component for Input {
    166              <div class="uk-inline message-input">
    167                  <span class="material-icons" id="ma-icon">{"create"}</span>
    168                  <input class="uk-input" type="text"
    169 -                    value=&self.state.value.as_ref().unwrap_or(&"".to_string())
    170 +                    value=&self.state.value.as_deref().unwrap_or("")
    171                      oninput=&self.on_input
    172                      onkeypress=&self.on_submit
    173                  />
    174 diff --git a/src/app/components/room_list/item.rs b/src/app/components/room_list/item.rs
    175 index f3041aa..1c317c1 100644
    176 --- a/src/app/components/room_list/item.rs
    177 +++ b/src/app/components/room_list/item.rs
    178 @@ -52,18 +52,19 @@ impl Component for RoomItem {
    179  
    180          // TODO placeholder for encrypted rooms
    181          let last_message = match room.messages.iter().last() {
    182 -            None => "".to_string(),
    183 +            None => "",
    184              Some(m) => {
    185                  if let AnyMessageEventContent::RoomMessage(MessageEventContent::Text(text_event)) =
    186 -                    m.content.clone()
    187 +                    &m.content
    188                  {
    189 -                    text_event.body
    190 +                    &text_event.body
    191                  } else {
    192 -                    "".to_string()
    193 +                    ""
    194                  }
    195              }
    196          };
    197  
    198 +        let room = room.clone();
    199          let display_name = room.display_name();
    200  
    201          html! {