More work on Network stage.
This commit is contained in:
@@ -26,7 +26,7 @@ use iced::{Alignment, widget};
|
||||
use rust_i18n::t;
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::stage;
|
||||
use crate::{stage, theme};
|
||||
use crate::stage::StageResult;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -81,7 +81,9 @@ impl LicenseStage {
|
||||
widget::column![
|
||||
widget::container(widget::column![
|
||||
widget::text(t!("license.accept_text")),
|
||||
widget::text(t!("license.license"))
|
||||
widget::container(widget::text(t!("license.license")))
|
||||
.padding(10)
|
||||
.style(theme::text_with_border)
|
||||
].align_x(Alignment::Center).padding(20).spacing(5))
|
||||
.height(iced::Length::Fill)
|
||||
.width(iced::Length::Fill)
|
||||
|
||||
+41
-31
@@ -22,7 +22,6 @@
|
||||
use iced::{Alignment, Task, widget};
|
||||
use iced_moving_picture::widget::apng;
|
||||
use rust_i18n::t;
|
||||
use smol;
|
||||
use std::collections::HashMap;
|
||||
use toml::Table;
|
||||
|
||||
@@ -30,6 +29,8 @@ use crate::stage;
|
||||
use crate::stage::StageResult;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
pub enum State {
|
||||
Cheking,
|
||||
Normal,
|
||||
@@ -49,6 +50,7 @@ pub struct NetworkStage {
|
||||
use_net_settings: bool,
|
||||
reqire_network: bool,
|
||||
spinner_frames: apng::Frames,
|
||||
status_message: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -69,6 +71,8 @@ pub enum UpdateResult {
|
||||
fn check_connection_blocking() -> CheckResult {
|
||||
use std::process::Command;
|
||||
|
||||
std::thread::sleep(std::time::Duration::from_secs(5));
|
||||
|
||||
match Command::new("nm-online").arg("-q").status() {
|
||||
Ok(status) => {
|
||||
if status.success() {
|
||||
@@ -115,6 +119,7 @@ impl NetworkStage {
|
||||
use_net_settings: false,
|
||||
reqire_network: reqire_network,
|
||||
spinner_frames: spinner_frames,
|
||||
status_message: t!("network.checking").into(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,6 +145,7 @@ impl NetworkStage {
|
||||
match message {
|
||||
Message::CheckNetwork => {
|
||||
self.state = State::Cheking;
|
||||
self.status_message = t!("network.checking").into();
|
||||
UpdateResult::Task(Task::perform(check_connected(), Message::CheckCompleted))
|
||||
}
|
||||
Message::CheckCompleted(check_status) => {
|
||||
@@ -147,14 +153,17 @@ impl NetworkStage {
|
||||
CheckResult::Connected => {
|
||||
self.internet_active = true;
|
||||
self.state = State::Normal;
|
||||
self.status_message = t!("network.ok").into();
|
||||
}
|
||||
CheckResult::NoConnection => {
|
||||
self.internet_active = false;
|
||||
self.state = State::Normal;
|
||||
self.status_message = t!("network.no_connection").into();
|
||||
}
|
||||
CheckResult::CheckError => {
|
||||
self.internet_active = false;
|
||||
self.state = State::Normal;
|
||||
self.status_message = t!("network.check_error").into();
|
||||
}
|
||||
}
|
||||
UpdateResult::StageAction(stage::StageAction::None)
|
||||
@@ -169,45 +178,46 @@ impl NetworkStage {
|
||||
}
|
||||
|
||||
pub fn view(&self) -> iced::Element<'_, Message> {
|
||||
let (next_button, back_button) = match self.state {
|
||||
let next_button = if (self.state == State::Cheking) || (!self.internet_active && self.reqire_network) {
|
||||
widget::button(widget::text(t!("button.next")))
|
||||
}
|
||||
else {
|
||||
widget::button(widget::text(t!("button.next"))).on_press(Message::Next)
|
||||
};
|
||||
|
||||
let (back_button, check_button, reuse_checkbox) = match self.state {
|
||||
State::Cheking => (
|
||||
widget::button(widget::text(t!("button.next"))),
|
||||
widget::button(widget::text(t!("button.back"))),
|
||||
),
|
||||
State::Normal => (
|
||||
widget::button(widget::text(t!("button.next"))).on_press(Message::Next),
|
||||
widget::button(widget::text(t!("button.back"))).on_press(Message::Back),
|
||||
),
|
||||
};
|
||||
|
||||
let mut info_column = match self.state {
|
||||
State::Cheking => widget::Column::new()
|
||||
.push(
|
||||
widget::container(apng(&self.spinner_frames))
|
||||
.center_x(iced::Length::Fill)
|
||||
.center_y(iced::Length::Fill),
|
||||
)
|
||||
.push(widget::text(t!("network.checking"))),
|
||||
State::Normal => widget::Column::new(),
|
||||
};
|
||||
|
||||
info_column = info_column.push(widget::text(t!("network.reuse_question")));
|
||||
|
||||
info_column = match self.state {
|
||||
State::Cheking => info_column.push(
|
||||
widget::button(widget::text(t!("network.button.check"))),
|
||||
widget::checkbox(self.use_net_settings).label(t!("network.reuse_checkbox_caption")),
|
||||
),
|
||||
State::Normal => info_column.push(
|
||||
State::Normal => (
|
||||
widget::button(widget::text(t!("button.back"))).on_press(Message::Back),
|
||||
widget::button(widget::text(t!("network.button.check")))
|
||||
.on_press(Message::CheckNetwork),
|
||||
widget::checkbox(self.use_net_settings)
|
||||
.label(t!("network.reuse_checkbox_caption"))
|
||||
.on_toggle(Message::UseSettingsTogle),
|
||||
)
|
||||
),
|
||||
};
|
||||
|
||||
info_column = info_column
|
||||
.align_x(Alignment::Center)
|
||||
.padding(20)
|
||||
.spacing(5);
|
||||
let spinner_container = match self.state {
|
||||
State::Cheking => widget::container(apng(&self.spinner_frames)),
|
||||
State::Normal => widget::container(widget::space().height(128).width(128)),
|
||||
};
|
||||
|
||||
let info_column = widget::column![
|
||||
spinner_container,
|
||||
widget::row![widget::text(self.status_message.as_str()), check_button]
|
||||
.align_y(Alignment::Center)
|
||||
.padding(10)
|
||||
.spacing(10),
|
||||
widget::text(t!("network.reuse_question")),
|
||||
reuse_checkbox
|
||||
]
|
||||
.align_x(Alignment::Center)
|
||||
.padding(20)
|
||||
.spacing(10);
|
||||
|
||||
widget::column![
|
||||
widget::container(info_column)
|
||||
|
||||
Reference in New Issue
Block a user