Finish basic login prompt
This commit is contained in:
parent
675b788f81
commit
dca34c60a0
|
@ -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" }
|
||||||
|
|
|
@ -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
17
src/matrix.rs
Normal 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)
|
||||||
|
}
|
74
src/ui.rs
74
src/ui.rs
|
@ -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(
|
||||||
|
TextInput::new(server_input, "Server", server, |val| {
|
||||||
Message::SetServer(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(),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue