From 2e034f848ea4fc47f655f6482eb319d69800f17e Mon Sep 17 00:00:00 2001 From: takotori Date: Sat, 2 Dec 2023 15:17:20 +0100 Subject: [PATCH] Implement wifi options route --- src/components/wifi/wifiAddressEntry.rs | 14 +- src/components/wifi/wifiOptions.rs | 44 +++-- src/components/wifi/wifiOptionsImpl.rs | 6 + src/components/wifi/wifiRouteEntry.rs | 226 ++++++++++++++++++++-- src/components/wifi/wifiRouteEntryImpl.rs | 9 +- src/resources/resetBluetoothEntry.ui | 2 +- src/resources/resetUI.cmb | 43 ++-- src/resources/resetWifiAddressEntry.ui | 20 +- src/resources/resetWifiOptions.ui | 17 ++ src/resources/resetWifiRouteEntry.ui | 20 +- 10 files changed, 326 insertions(+), 75 deletions(-) diff --git a/src/components/wifi/wifiAddressEntry.rs b/src/components/wifi/wifiAddressEntry.rs index 844c561..b0b48c1 100644 --- a/src/components/wifi/wifiAddressEntry.rs +++ b/src/components/wifi/wifiAddressEntry.rs @@ -32,7 +32,7 @@ impl WifiAddressEntry { entryImp.resetAddressAddress.set_text(&*address.address); entryImp.resetAddressPrefix.set_text(&*address.prefix_length.to_string()); - entryImp.resetAddressRow.set_title(&format!("{}, {}", &*address.address, address.prefix_length)); + entryImp.resetAddressRow.set_title(&format!("{}/{}", &*address.address, address.prefix_length)); } entryImp.protocol.set(protocol); entry.setupCallbacks(conn); @@ -43,7 +43,7 @@ impl WifiAddressEntry { let selfImp = self.imp(); let conn = connection.clone(); - selfImp.resetAddressAddress.connect_changed(clone!(@weak selfImp, @weak self as what => move |entry| { + selfImp.resetAddressAddress.connect_changed(clone!(@weak selfImp => move |entry| { let addressInput = entry.text(); let mut conn = conn.borrow_mut(); @@ -57,14 +57,14 @@ impl WifiAddressEntry { IpProtocol::IPv6 => Ipv6Addr::from_str(addressInput.as_str()).map(|a| IpAddr::V6(a)), }; match result { - Ok(ip_addr) => { + Ok(ipAddr) => { selfImp.resetAddressAddress.remove_css_class("error"); let addressData = match selfImp.protocol.get() { IpProtocol::IPv4 => &mut conn.ipv4.address_data, IpProtocol::IPv6 => &mut conn.ipv6.address_data, }; - addressData.push(Address::theBetterNew(ip_addr.to_string(), selfImp.prefix.get().1 as u32)); - *selfImp.address.borrow_mut() = (true, ip_addr.to_string()); + addressData.push(Address::theBetterNew(ipAddr.to_string(), selfImp.prefix.get().1 as u32)); + *selfImp.address.borrow_mut() = (true, ipAddr.to_string()); } Err(_) => { selfImp.resetAddressAddress.add_css_class("error"); @@ -98,7 +98,7 @@ impl WifiAddressEntry { let prefix = prefix.unwrap(); match selfImp.protocol.get() { - IpProtocol::IPv4 if prefix < 32 => { + IpProtocol::IPv4 if prefix <= 32 => { selfImp.prefix.set((true, prefix as u32)); selfImp.resetAddressPrefix.remove_css_class("error"); if let Ok(address2) = Ipv4Addr::from_str(selfImp.resetAddressAddress.text().as_str()) { @@ -108,7 +108,7 @@ impl WifiAddressEntry { } } } - IpProtocol::IPv6 if prefix < 128 => { + IpProtocol::IPv6 if prefix <= 128 => { selfImp.prefix.set((true, prefix as u32)); selfImp.resetAddressPrefix.remove_css_class("error"); if let Ok(address2) = Ipv6Addr::from_str(selfImp.resetAddressAddress.text().as_str()) { diff --git a/src/components/wifi/wifiOptions.rs b/src/components/wifi/wifiOptions.rs index ffddcb2..db7b7c5 100644 --- a/src/components/wifi/wifiOptions.rs +++ b/src/components/wifi/wifiOptions.rs @@ -6,11 +6,10 @@ use adw::glib; use adw::glib::Object; use adw::prelude::{ActionRowExt, ComboRowExt, PreferencesGroupExt}; use adw::subclass::prelude::ObjectSubclassIsExt; -use dbus::arg::PropMap; -use glib::{clone, closure_local, ObjectExt, PropertySet}; +use glib::{clone, PropertySet}; use gtk::prelude::{ButtonExt, EditableExt, WidgetExt}; -use gtk::Widget; use ReSet_Lib::network::connection::{Connection, DNSMethod4, DNSMethod6, Enum, TypeSettings}; +use IpProtocol::{IPv4, IPv6}; use crate::components::wifi::utils::IpProtocol; use crate::components::wifi::wifiAddressEntry::WifiAddressEntry; @@ -96,34 +95,33 @@ impl WifiOptions { } // IPv4 for i in 0..ip4AddressLength { - let address = &WifiAddressEntry::new(Some(i), selfImp.connection.clone(), IpProtocol::IPv4); + let address = &WifiAddressEntry::new(Some(i), selfImp.connection.clone(), IPv4); selfImp.resetIP4AddressGroup.add(address); } - let address = &WifiAddressEntry::new(None, selfImp.connection.clone(), IpProtocol::IPv4); + let address = &WifiAddressEntry::new(None, selfImp.connection.clone(), IPv4); selfImp.resetIP4AddressGroup.add(address); - if ip4RouteLength == 0 { - selfImp.resetIP4RoutesGroup.add(&WifiRouteEntry::new(None, selfImp.connection.clone(), IpProtocol::IPv4)) - } else { - for address in 0..ip4RouteLength { - selfImp.resetIP4RoutesGroup.add(&WifiRouteEntry::new(Some(address), selfImp.connection.clone(), IpProtocol::IPv4)) - } + for i in 0..ip4RouteLength { + let route = &WifiRouteEntry::new(Some(i), selfImp.connection.clone(), IPv4); + selfImp.resetIP4RoutesGroup.add(route) } + let route = &WifiRouteEntry::new(None, selfImp.connection.clone(), IPv4); + selfImp.resetIP4RoutesGroup.add(route); + // IPv6 - for address in 0..ip6AddressLength { - let address = &WifiAddressEntry::new(Some(address), selfImp.connection.clone(), IpProtocol::IPv6); + for i in 0..ip6AddressLength { + let address = &WifiAddressEntry::new(Some(i), selfImp.connection.clone(), IPv6); selfImp.resetIP6AddressGroup.add(address); } - let address = &WifiAddressEntry::new(None, selfImp.connection.clone(), IpProtocol::IPv6); + let address = &WifiAddressEntry::new(None, selfImp.connection.clone(), IPv6); selfImp.resetIP6AddressGroup.add(address); - if ip6RouteLength == 0 { - selfImp.resetIP6RoutesGroup.add(&WifiRouteEntry::new(None, selfImp.connection.clone(), IpProtocol::IPv6)) - } else { - for address in 0..ip6RouteLength { - selfImp.resetIP6RoutesGroup.add(&WifiRouteEntry::new(Some(address), selfImp.connection.clone(), IpProtocol::IPv6)) - } + for i in 0..ip6RouteLength { + let route = &WifiRouteEntry::new(Some(i), selfImp.connection.clone(), IPv6); + selfImp.resetIP6RoutesGroup.add(route) } + let route = &WifiRouteEntry::new(None, selfImp.connection.clone(), IPv6); + selfImp.resetIP6RoutesGroup.add(route) // Security } @@ -182,6 +180,7 @@ fn setupCallbacks(wifiOptions: &Arc) { })); imp.wifiOptionsApplyButton.connect_clicked(clone!(@weak imp => move |_| { let prop = imp.connection.borrow().convert_to_propmap(); + // todo send to daemon somehow })); // IPv4 let wifiOptionsIP4 = wifiOptions.clone(); @@ -255,6 +254,11 @@ fn setupCallbacks(wifiOptions: &Arc) { } } })); + imp.resetIP6AddressAddButton.connect_clicked(clone!(@weak imp => move |_| { + let address = &WifiAddressEntry::new(None, imp.connection.clone(), IpProtocol::IPv4); + imp.resetIP6AddressGroup.add(address); + })); + imp.resetIP6Gateway.connect_changed(clone!(@weak imp => move |entry| { let gatewayInput = entry.text(); let mut conn = imp.connection.borrow_mut(); diff --git a/src/components/wifi/wifiOptionsImpl.rs b/src/components/wifi/wifiOptionsImpl.rs index cb9226a..175f14c 100644 --- a/src/components/wifi/wifiOptionsImpl.rs +++ b/src/components/wifi/wifiOptionsImpl.rs @@ -45,6 +45,8 @@ pub struct WifiOptions { pub resetIP4AddressAddButton: TemplateChild