daydream

A small matrix web client written in rust
git clone git://archive.git.mtrnord.blog/daydream-mx/daydream.git
Log | Files | Refs | README | LICENSE

mod.rs (1615B)


      1 use matrix_sdk::events::AnySyncMessageEvent;
      2 use matrix_sdk::Room;
      3 use url::Url;
      4 
      5 use crate::app::matrix::types::get_media_download_url;
      6 
      7 pub mod image;
      8 pub mod notice;
      9 pub mod text;
     10 pub mod video;
     11 
     12 pub trait EventExt {
     13     fn is_new_user(&self, prev_event: Option<&AnySyncMessageEvent>) -> bool;
     14 }
     15 
     16 impl EventExt for AnySyncMessageEvent {
     17     fn is_new_user(&self, prev_event: Option<&AnySyncMessageEvent>) -> bool {
     18         if let Some(prev_event) = prev_event {
     19             prev_event.sender() != self.sender()
     20         } else {
     21             true
     22         }
     23     }
     24 }
     25 
     26 pub trait RoomExt {
     27     fn get_sender_displayname<'a>(&'a self, event: &'a AnySyncMessageEvent) -> &'a str;
     28     fn get_sender_avatar<'a>(
     29         &'a self,
     30         homeserver_url: &'a Url,
     31         event: &'a AnySyncMessageEvent,
     32     ) -> Option<Url>;
     33 }
     34 
     35 impl RoomExt for Room {
     36     fn get_sender_displayname<'a>(&'a self, event: &'a AnySyncMessageEvent) -> &'a str {
     37         self.joined_members
     38             .get(&event.sender())
     39             .or_else(|| self.invited_members.get(&event.sender()))
     40             .and_then(|member| member.display_name.as_deref())
     41             .unwrap_or_else(|| event.sender().as_str())
     42     }
     43 
     44     fn get_sender_avatar<'a>(
     45         &self,
     46         homeserver_url: &'a Url,
     47         event: &'a AnySyncMessageEvent,
     48     ) -> Option<Url> {
     49         let member = self
     50             .joined_members
     51             .get(&event.sender())
     52             .or_else(|| self.invited_members.get(&event.sender()))?;
     53 
     54         Some(get_media_download_url(
     55             homeserver_url,
     56             member.avatar_url.as_deref()?,
     57         ))
     58     }
     59 }