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

commit b75cd49f1e368397490617f4af8ec037a020af1e
parent 934c0f36b5964dd7ab8501da61420e6df88b9b94
Author: Marcel <mtrnord1@gmail.com>
Date:   Mon,  8 Jun 2020 17:01:20 +0200

Run cargo fmt

Took 36 minutes

Diffstat:
MCargo.toml | 13+++++++++++++
Msrc/app/components/event_list.rs | 4++--
Msrc/app/components/events/image.rs | 41++++++++++++++++++++++++++++++++++-------
Msrc/app/components/events/text.rs | 9+--------
Msrc/app/components/events/video.rs | 39+++++++++++++++++++++++++++++++++------
Msrc/app/components/room_list.rs | 2+-
Msrc/app/matrix/mod.rs | 4++--
Msrc/app/matrix/sync.rs | 5++---
Msrc/app/mod.rs | 2+-
Msrc/app/views/login.rs | 41++++++++++++++++-------------------------
Msrc/app/views/main_view.rs | 2+-
Msrc/errors.rs | 4++--
Msrc/lib.rs | 2+-
Mtests/web.rs | 8--------
Awebdriver.json | 15+++++++++++++++
15 files changed, 124 insertions(+), 67 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml @@ -39,6 +39,19 @@ rust-embed = { version = "5", features = ["debug-embed", "compression"]} [dev-dependencies] wasm-bindgen-test = "0.3" +reqwest = { version = "0.10", features = ["blocking", "json"] } +futures-timer = { version = "3.0.2", features = ["wasm-bindgen"] } + +[dev-dependencies.web-sys] +version = "0.3" +features = [ + 'Document', + 'Element', + 'HtmlElement', + 'Node', + 'Window', +] + [dependencies.web-sys] version = "0.3" diff --git a/src/app/components/event_list.rs b/src/app/components/event_list.rs @@ -8,7 +8,7 @@ use matrix_sdk::{ }; use yew::prelude::*; -use crate::app::components::events::{text::Text, notice::Notice, image::Image, video::Video}; +use crate::app::components::events::{image::Image, notice::Notice, text::Text, video::Video}; use crate::app::matrix::{MatrixAgent, Request, Response}; pub struct EventList { @@ -209,7 +209,7 @@ impl EventList { .display_name .as_ref() .map(ToString::to_string) - .unwrap_or_else(||event.sender.to_string()), + .unwrap_or_else(|| event.sender.to_string()), } }; match &event.content { diff --git a/src/app/components/events/image.rs b/src/app/components/events/image.rs @@ -1,9 +1,9 @@ +use crate::app::components::events::{get_sender_displayname, is_new_user}; use matrix_sdk::{ - events::room::message::{MessageEvent, ImageMessageEventContent}, + events::room::message::{ImageMessageEventContent, MessageEvent}, Room, }; use yew::prelude::*; -use crate::app::components::events::{is_new_user, get_sender_displayname}; pub(crate) struct Image { props: Props, @@ -58,11 +58,38 @@ impl Component for Image { "".to_string() }; - - let caption = format!("{}: {}", sender_displayname, self.props.image_event.as_ref().unwrap().body); - if self.props.image_event.as_ref().unwrap().url.clone().is_some() { - let image_url = self.props.image_event.as_ref().unwrap().url.clone().unwrap(); - let thumbnail = match self.props.image_event.as_ref().unwrap().info.clone().unwrap().thumbnail_url { + let caption = format!( + "{}: {}", + sender_displayname, + self.props.image_event.as_ref().unwrap().body + ); + if self + .props + .image_event + .as_ref() + .unwrap() + .url + .clone() + .is_some() + { + let image_url = self + .props + .image_event + .as_ref() + .unwrap() + .url + .clone() + .unwrap(); + let thumbnail = match self + .props + .image_event + .as_ref() + .unwrap() + .info + .clone() + .unwrap() + .thumbnail_url + { None => image_url.clone(), Some(v) => v, }; diff --git a/src/app/components/events/text.rs b/src/app/components/events/text.rs @@ -59,14 +59,7 @@ impl Component for Text { } else { "".to_string() }; - if self - .props - .text_event - .clone() - .unwrap() - .formatted - .is_some() - { + if self.props.text_event.clone().unwrap().formatted.is_some() { let message = if new_user { format!( "<displayname>{}:</displayname> {}", diff --git a/src/app/components/events/video.rs b/src/app/components/events/video.rs @@ -1,9 +1,9 @@ +use crate::app::components::events::{get_sender_displayname, is_new_user}; use matrix_sdk::{ events::room::message::{MessageEvent, VideoMessageEventContent}, Room, }; use yew::prelude::*; -use crate::app::components::events::{is_new_user, get_sender_displayname}; pub(crate) struct Video { props: Props, @@ -58,11 +58,38 @@ impl Component for Video { "".to_string() }; - - let caption = format!("{}: {}", sender_displayname, self.props.video_event.as_ref().unwrap().body); - if self.props.video_event.as_ref().unwrap().url.clone().is_some() { - let video_url = self.props.video_event.as_ref().unwrap().url.clone().unwrap(); - let thumbnail = match self.props.video_event.as_ref().unwrap().info.clone().unwrap().thumbnail_url { + let caption = format!( + "{}: {}", + sender_displayname, + self.props.video_event.as_ref().unwrap().body + ); + if self + .props + .video_event + .as_ref() + .unwrap() + .url + .clone() + .is_some() + { + let video_url = self + .props + .video_event + .as_ref() + .unwrap() + .url + .clone() + .unwrap(); + let thumbnail = match self + .props + .video_event + .as_ref() + .unwrap() + .info + .clone() + .unwrap() + .thumbnail_url + { None => video_url.clone(), Some(v) => v, }; diff --git a/src/app/components/room_list.rs b/src/app/components/room_list.rs @@ -4,9 +4,9 @@ use matrix_sdk::{identifiers::RoomId, js_int::UInt, Room}; use serde::{Deserialize, Serialize}; use wasm_bindgen::JsCast; use web_sys::HtmlElement; -use yew::{Bridge, Bridged, Component, ComponentLink, Html}; use yew::prelude::*; use yew::utils::document; +use yew::{Bridge, Bridged, Component, ComponentLink, Html}; use yewtil::NeqAssign; use tr::tr; diff --git a/src/app/matrix/mod.rs b/src/app/matrix/mod.rs @@ -167,7 +167,7 @@ impl Agent for MatrixAgent { user_id: matrix_sdk::identifiers::UserId::try_from( stored_session.user_id.as_str(), ) - .unwrap(), + .unwrap(), device_id: stored_session.device_id, }; client.restore_login(session).await; @@ -336,7 +336,7 @@ impl Agent for MatrixAgent { for event in deserialized_events.into_iter().rev() { 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( diff --git a/src/app/matrix/sync.rs b/src/app/matrix/sync.rs @@ -19,9 +19,8 @@ pub struct Sync { impl Sync { pub async fn start_sync(&self) { let client = self.matrix_client.clone(); - let settings = SyncSettings::default() - .timeout(Duration::from_secs(30)); - //.full_state(true); + let settings = SyncSettings::default().timeout(Duration::from_secs(30)); + //.full_state(true); client .sync_forever(settings, |response| self.on_sync_response(response)) diff --git a/src/app/mod.rs b/src/app/mod.rs @@ -1,6 +1,6 @@ use yew::{prelude::*, virtual_dom::VNode}; -use yew_router::{prelude::*, Switch}; use yew_router::agent::RouteRequest::ChangeRoute; +use yew_router::{prelude::*, Switch}; use crate::app::matrix::{MatrixAgent, Response}; use crate::app::views::{login::Login, main_view::MainView}; diff --git a/src/app/views/login.rs b/src/app/views/login.rs @@ -1,13 +1,13 @@ -use yew::prelude::*; -use serde::{Deserialize, Serialize}; use log::*; +use serde::{Deserialize, Serialize}; +use yew::prelude::*; use tr::tr; use crate::app::matrix::{MatrixAgent, Request, Response}; -use crate::errors::{MatrixError, Field}; -use wasm_bindgen::__rt::std::thread::sleep; +use crate::errors::{Field, MatrixError}; use wasm_bindgen::__rt::core::time::Duration; +use wasm_bindgen::__rt::std::thread::sleep; pub struct Login { link: ComponentLink<Self>, @@ -31,7 +31,7 @@ pub struct State { password: String, error: Option<String>, error_field: Option<Field>, - retries: u64 + retries: u64, } impl Component for Login { @@ -48,7 +48,7 @@ impl Component for Login { password: "".to_string(), error: None, error_field: None, - retries: 0 + retries: 0, }; Login { link, @@ -93,7 +93,7 @@ impl Component for Login { self.state.error = Some(error.to_string()); self.state.error_field = Some(field); true - }, + } MatrixError::LoginTimeout => { // If we had less than 10 tries try again if self.state.retries < 10 { @@ -104,21 +104,20 @@ impl Component for Login { false } else { self.state.loading = false; - self.state.error = Some("Login failed after 10 tries.".to_string()); + self.state.error = + Some("Login failed after 10 tries.".to_string()); true } - }, + } MatrixError::SDKError(e) => { // TODO handle login error != timeout better error!("SDK Error: {}", e); false } - _ => { - false - } + _ => false, } } - _ => false + _ => false, } } } @@ -134,18 +133,10 @@ impl Component for Login { let mut mxid_classes = "uk-input"; let mut password_classes = "uk-input"; match self.state.error_field.as_ref() { - Some(v) => { - match v { - Field::Homeserver => { - homeserver_classes = "uk-input uk-form-danger" - }, - Field::MXID => { - mxid_classes = "uk-input uk-form-danger" - }, - Field::Password => { - password_classes = "uk-input uk-form-danger" - }, - } + Some(v) => match v { + Field::Homeserver => homeserver_classes = "uk-input uk-form-danger", + Field::MXID => mxid_classes = "uk-input uk-form-danger", + Field::Password => password_classes = "uk-input uk-form-danger", }, _ => {} } diff --git a/src/app/views/main_view.rs b/src/app/views/main_view.rs @@ -1,8 +1,8 @@ use log::*; use matrix_sdk::Room; use serde::{Deserialize, Serialize}; -use yew::ComponentLink; use yew::prelude::*; +use yew::ComponentLink; use tr::tr; diff --git a/src/errors.rs b/src/errors.rs @@ -1,6 +1,6 @@ -use thiserror::Error; +use serde::{Deserialize, Serialize}; use std::fmt; -use serde::{Serialize, Deserialize}; +use thiserror::Error; #[derive(Debug, Clone, Serialize, Deserialize)] pub enum Field { diff --git a/src/lib.rs b/src/lib.rs @@ -7,7 +7,7 @@ use i18n_embed::{language_loader, I18nEmbed, WebLanguageRequester}; use rust_embed::RustEmbed; use wasm_bindgen::prelude::*; -mod app; +pub mod app; mod constants; mod errors; diff --git a/tests/web.rs b/tests/web.rs @@ -6,11 +6,3 @@ extern crate wasm_bindgen_test; use wasm_bindgen_test::*; wasm_bindgen_test_configure!(run_in_browser); - -#[wasm_bindgen_test] -fn pass() { - assert_eq!(1 + 1, 2); -} - -#[wasm_bindgen_test] -fn login() {} diff --git a/webdriver.json b/webdriver.json @@ -0,0 +1,15 @@ +{ + "moz:firefoxOptions": { + "prefs": { + "media.navigator.streams.fake": true, + "media.navigator.permission.disabled": true + }, + "args": [] + }, + "goog:chromeOptions": { + "args": [ + "--use-fake-device-for-media-stream", + "--use-fake-ui-for-media-stream" + ] + } +}