diff --git a/src/components/wifi/wifi_address_entry.rs b/src/components/wifi/wifi_address_entry.rs index 92da84e..b3416d3 100644 --- a/src/components/wifi/wifi_address_entry.rs +++ b/src/components/wifi/wifi_address_entry.rs @@ -1,3 +1,4 @@ +use re_set_lib::network::connection::Address; use std::cell::RefCell; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use std::rc::Rc; @@ -9,7 +10,7 @@ use adw::prelude::PreferencesRowExt; use glib::clone; use glib::subclass::prelude::ObjectSubclassIsExt; use gtk::prelude::{ButtonExt, EditableExt, WidgetExt}; -use re_set_lib::network::connection::{Address, Connection}; +use re_set_lib::network::connection::{Connection}; use crate::components::wifi::utils::IpProtocol; use crate::components::wifi::wifi_address_entry_impl; @@ -37,10 +38,10 @@ impl WifiAddressEntry { entry_imp.reset_address_address.set_text(&address.address); entry_imp .reset_address_prefix - .set_text(&address.prefix_length.to_string()); + .set_text(&address.prefix.to_string()); entry_imp .reset_address_row - .set_title(&format!("{}/{}", &*address.address, address.prefix_length)); + .set_title(&format!("{}/{}", &*address.address, address.prefix)); } entry_imp.protocol.set(protocol); entry.setup_callbacks(conn); @@ -71,7 +72,7 @@ impl WifiAddressEntry { IpProtocol::IPv4 => &mut conn.ipv4.address_data, IpProtocol::IPv6 => &mut conn.ipv6.address_data, }; - address_data.push(Address::new_no_options(ip_addr.to_string(), self_imp.prefix.get().1 as u32)); + address_data.push(Address::new_no_options(ip_addr.to_string(), self_imp.prefix.get().1)); *self_imp.address.borrow_mut() = (true, ip_addr.to_string()); } Err(_) => { @@ -111,7 +112,7 @@ impl WifiAddressEntry { if let Ok(address2) = Ipv4Addr::from_str(self_imp.reset_address_address.text().as_str()) { if let Some(addr) = conn.ipv4.address_data.iter_mut() .find(|conn_addr| *conn_addr.address == address2.to_string()) { - addr.prefix_length = prefix as u32; + addr.prefix = prefix as u32; } } } @@ -121,7 +122,7 @@ impl WifiAddressEntry { if let Ok(address2) = Ipv6Addr::from_str(self_imp.reset_address_address.text().as_str()) { if let Some(addr) = conn.ipv6.address_data.iter_mut() .find(|conn_addr| *conn_addr.address == address2.to_string()) { - addr.prefix_length = prefix as u32; + addr.prefix = prefix as u32; } } } diff --git a/src/components/wifi/wifi_options.rs b/src/components/wifi/wifi_options.rs index 0da08f8..f71cb5d 100644 --- a/src/components/wifi/wifi_options.rs +++ b/src/components/wifi/wifi_options.rs @@ -4,15 +4,16 @@ use std::str::FromStr; use std::sync::Arc; use std::time::Duration; +use adw::{gio, glib}; use adw::glib::Object; use adw::prelude::{ActionRowExt, ComboRowExt, PreferencesGroupExt}; use adw::subclass::prelude::ObjectSubclassIsExt; -use adw::{gio, glib}; -use dbus::arg::PropMap; use dbus::{Error, Path}; +use dbus::arg::PropMap; use glib::{clone, PropertySet}; -use gtk::prelude::{ButtonExt, EditableExt, WidgetExt}; +use gtk::prelude::{ActionableExt, ButtonExt, EditableExt, ListBoxRowExt, WidgetExt}; use re_set_lib::network::connection::{Connection, DNSMethod4, DNSMethod6, Enum, KeyManagement, TypeSettings}; + use IpProtocol::{IPv4, IPv6}; use crate::components::wifi::utils::IpProtocol; @@ -50,7 +51,7 @@ impl WifiOptions { ip4_route_length = conn.ipv4.route_data.len(); ip6_address_length = conn.ipv4.address_data.len(); ip6_route_length = conn.ipv4.route_data.len(); - + // dbg!(&conn); // General self_imp .reset_wifi_auto_connect @@ -59,7 +60,7 @@ impl WifiOptions { .reset_wifi_metered .set_active(conn.settings.metered != -1); match &conn.device { - TypeSettings::WIFI(wifi, _) => { + TypeSettings::WIFI(wifi) => { self_imp.reset_wifi_link_speed.set_visible(false); self_imp.reset_wifi_ip4_addr.set_visible(false); self_imp.reset_wifi_ip6_addr.set_visible(false); @@ -130,24 +131,24 @@ impl WifiOptions { self_imp.reset_ip6_gateway.set_text(&conn.ipv6.gateway); // Security - if let TypeSettings::WIFI(_, wifi_security) = &conn.device { - match wifi_security.key_management { - KeyManagement::NONE => { - self_imp.reset_wifi_security_dropdown.set_selected(0); - self_imp.reset_wifi_password.set_visible(false); - self_imp.reset_wifi_password.set_text(""); - } - KeyManagement::WPAPSK => { - self_imp.reset_wifi_security_dropdown.set_selected(1); - self_imp.reset_wifi_password.set_visible(true); - self_imp - .reset_wifi_password - .set_text(&wifi_security.psk); - } - _ => {} + + match &conn.security.key_management { + KeyManagement::NONE => { + self_imp.reset_wifi_security_dropdown.set_selected(0); + self_imp.reset_wifi_password.set_visible(false); + self_imp.reset_wifi_password.set_text(""); } + KeyManagement::WPAPSK => { + self_imp.reset_wifi_security_dropdown.set_selected(1); + self_imp.reset_wifi_password.set_visible(true); + self_imp + .reset_wifi_password + .set_text(&conn.security.psk); + } + _ => {} } } + // IPv4 for i in 0..ip4_address_length { let address = &WifiAddressEntry::new(Some(i), self_imp.connection.clone(), IPv4); @@ -177,7 +178,6 @@ impl WifiOptions { } let route = &WifiRouteEntry::new(None, self_imp.connection.clone(), IPv6); self_imp.reset_ip6_routes_group.add(route); - // Security } pub fn set_ip4_visibility(&self, method: u32) { @@ -352,29 +352,35 @@ fn setup_callbacks(wifi_options: &Arc, path: Path<'static>) { let selected = dropdown.selected(); let mut conn = imp.connection.borrow_mut(); - match (selected, &mut conn.device) { - (0 , TypeSettings::WIFI(_, wifi_security)) => { // None + match selected { + 0 => { // None imp.reset_wifi_password.set_visible(false); - wifi_security.key_management = KeyManagement::NONE; - wifi_security.authentication_algorithm = String::from("none"); + conn.security.key_management = KeyManagement::NONE; + conn.security.authentication_algorithm = String::from("none"); }, - (1 , TypeSettings::WIFI(_, wifi_security)) => { // WPA/WPA2 Personal + 1 => { // WPA/WPA2 Personal imp.reset_wifi_password.set_visible(true); - wifi_security.key_management = KeyManagement::WPAPSK; - wifi_security.authentication_algorithm = String::from("none"); + conn.security.key_management = KeyManagement::WPAPSK; + conn.security.authentication_algorithm = String::from("none"); }, - (_, _) => {} + _ => {} } })); - imp.reset_wifi_password - .connect_changed(clone!(@weak imp => move |entry| { - let password_input = entry.text(); - let mut conn = imp.connection.borrow_mut(); - if let TypeSettings::WIFI(_, wifi_security) = &mut conn.device { - wifi_security.psk = password_input.to_string(); - } - })); + imp.reset_wifi_password.connect_changed(clone!(@weak imp => move |entry| { + let password_input = entry.text(); + if password_input.len() < 8 && !password_input.is_empty() { + entry.add_css_class("error"); + } else { + entry.remove_css_class("error"); + } + let mut conn = imp.connection.borrow_mut(); + conn.security.psk = password_input.to_string(); + })); + + imp.reset_available_networks.set_activatable(true); + imp.reset_available_networks + .set_action_name(Some("navigation.pop")); } fn set_connection_settings(path: Path<'static>, prop: HashMap) { @@ -385,10 +391,11 @@ fn set_connection_settings(path: Path<'static>, prop: HashMap) "/org/Xetibo/ReSetDaemon", Duration::from_millis(1000), ); - let _: Result<(bool,), Error> = proxy.method_call( + let asdf: Result<(bool,), Error> = proxy.method_call( "org.Xetibo.ReSetWireless", "SetConnectionSettings", (path, prop), ); + dbg!(asdf); }); } diff --git a/src/components/wifi/wifi_options_impl.rs b/src/components/wifi/wifi_options_impl.rs index bc69ca0..44dd5a9 100644 --- a/src/components/wifi/wifi_options_impl.rs +++ b/src/components/wifi/wifi_options_impl.rs @@ -4,7 +4,7 @@ use adw::{ ActionRow, ComboRow, EntryRow, NavigationPage, PasswordEntryRow, PreferencesGroup, SwitchRow, }; use gtk::subclass::prelude::*; -use gtk::{glib, Button, CompositeTemplate}; +use gtk::{glib, Button, CompositeTemplate, Label}; use re_set_lib::network::connection::Connection; use std::cell::RefCell; use std::rc::Rc; @@ -70,7 +70,11 @@ pub struct WifiOptions { pub reset_wifi_password: TemplateChild, // Misc #[template_child] + pub reset_available_networks: TemplateChild, + #[template_child] pub wifi_options_apply_button: TemplateChild