Finish basic login prompt

main
Amanda Graven 2020-11-23 17:18:05 +01:00
parent 675b788f81
commit dca34c60a0
Signed by: amanda
GPG Key ID: 45C461CDC9286390
4 changed files with 74 additions and 22 deletions

View File

@ -7,5 +7,5 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
iced = "0.1" iced = { version = "0.1", features = ["debug"] }
matrix-sdk = { git = "https://github.com/matrix-org/matrix-rust-sdk", rev = "27c6f30" } matrix-sdk = { git = "https://github.com/matrix-org/matrix-rust-sdk", rev = "27c6f30" }

View File

@ -1,5 +1,6 @@
use iced::Sandbox; use iced::Sandbox;
pub mod matrix;
pub mod ui; pub mod ui;
fn main() { fn main() {

17
src/matrix.rs Normal file
View File

@ -0,0 +1,17 @@
use matrix_sdk::{reqwest::Url, Client, SyncSettings};
async fn login(
username: &str,
password: &str,
server: &str,
) -> Result<Client, Box<dyn std::error::Error>> {
let url = Url::parse(server)?;
let client = Client::new(url)?;
client
.login(username, password, None, Some("retrix"))
.await?;
client.sync(SyncSettings::new()).await;
Ok(client)
}

View File

@ -1,16 +1,18 @@
use iced::{ use iced::{
text_input::{self, TextInput}, text_input::{self, TextInput},
Column, Container, Element, Row, Sandbox, Settings, Text, Button, Column, Container, Element, Sandbox, Text,
}; };
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub enum Retrix { pub enum Retrix {
Prompt { Prompt {
user_input: text_input::State, user_input: text_input::State,
user: String,
password_input: text_input::State, password_input: text_input::State,
password: String,
server_input: text_input::State, server_input: text_input::State,
login_button: iced::button::State,
user: String,
password: String,
server: String, server: String,
}, },
LoggedIn, LoggedIn,
@ -21,6 +23,7 @@ pub enum Message {
SetUser(String), SetUser(String),
SetPassword(String), SetPassword(String),
SetServer(String), SetServer(String),
Login,
} }
impl Sandbox for Retrix { impl Sandbox for Retrix {
@ -29,10 +32,12 @@ impl Sandbox for Retrix {
fn new() -> Self { fn new() -> Self {
Retrix::Prompt { Retrix::Prompt {
user_input: text_input::State::new(), user_input: text_input::State::new(),
user: String::new(),
password_input: text_input::State::new(), password_input: text_input::State::new(),
password: String::new(),
server_input: text_input::State::new(), server_input: text_input::State::new(),
login_button: Default::default(),
user: String::new(),
password: String::new(),
server: String::new(), server: String::new(),
} }
} }
@ -41,35 +46,64 @@ impl Sandbox for Retrix {
String::from("Retrix matrix client") String::from("Retrix matrix client")
} }
fn update(&mut self, message: Self::Message) {} fn update(&mut self, message: Self::Message) {
match *self {
Retrix::Prompt {
ref mut user,
ref mut password,
ref mut server,
..
} => match message {
Message::SetUser(u) => *user = u,
Message::SetPassword(p) => *password = p,
Message::SetServer(s) => *server = s,
Message::Login => (),
},
_ => (),
}
}
fn view(&mut self) -> Element<Self::Message> { fn view(&mut self) -> Element<Self::Message> {
match *self { match *self {
Retrix::Prompt { Retrix::Prompt {
ref mut user_input, ref mut user_input,
ref user,
ref mut password_input, ref mut password_input,
ref password,
ref mut server_input, ref mut server_input,
ref mut login_button,
ref user,
ref password,
ref server, ref server,
} => { } => {
let content = Column::new() let content = Column::new()
.width(500.into())
.push(Text::new("Username")) .push(Text::new("Username"))
.push(TextInput::new(user_input, "Username", user, |val| { .push(
Message::SetUser(val) TextInput::new(user_input, "Username", user, |val| Message::SetUser(val))
})) .padding(5),
)
.push(Text::new("Password")) .push(Text::new("Password"))
.push(TextInput::new( .push(
password_input, TextInput::new(password_input, "Password", password, |val| {
"Password", Message::SetPassword(val)
password, })
|val| Message::SetPassword(val), .password()
)) .padding(5),
)
.push(Text::new("Homeserver")) .push(Text::new("Homeserver"))
.push(TextInput::new(server_input, "Server", server, |val| { .push(
Message::SetServer(val) TextInput::new(server_input, "Server", server, |val| {
})); Message::SetServer(val)
content.into() })
.padding(5),
)
.push(Button::new(login_button, Text::new("Login")).on_press(Message::Login));
Container::new(content)
.center_x()
.center_y()
.width(iced::Length::Fill)
.height(iced::Length::Fill)
.into()
} }
_ => Text::new("Beep").into(), _ => Text::new("Beep").into(),
} }