Merge pull request #81 from Xetibo/ina

Ina
This commit is contained in:
takotori 2023-12-12 20:40:41 +01:00 committed by GitHub
commit f1f9d05cf4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 121 additions and 64 deletions

View file

@ -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;
}
}
}

View file

@ -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<WifiOptions>, 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<String, PropMap>) {
@ -385,10 +391,11 @@ fn set_connection_settings(path: Path<'static>, prop: HashMap<String, PropMap>)
"/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);
});
}

View file

@ -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<PasswordEntryRow>,
// Misc
#[template_child]
pub reset_available_networks: TemplateChild<ActionRow>,
#[template_child]
pub wifi_options_apply_button: TemplateChild<Button>,
#[template_child]
pub wifi_options_error_msg: TemplateChild<Label>,
pub connection: Rc<RefCell<Connection>>,
}

View file

@ -36,7 +36,7 @@ impl WifiRouteEntry {
entry_imp.reset_route_address.set_text(&address.address);
entry_imp
.reset_route_prefix
.set_text(&address.prefix_length.to_string());
.set_text(&address.prefix.to_string());
if let Some(gateway) = &address.gateway {
entry_imp.reset_route_gateway.set_text(gateway);
}
@ -45,7 +45,7 @@ impl WifiRouteEntry {
}
entry_imp
.reset_route_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);
@ -54,8 +54,8 @@ impl WifiRouteEntry {
fn setup_callbacks(&self, connection: Rc<RefCell<Connection>>) {
let self_imp = self.imp();
let conn = connection.clone();
dbg!(conn.borrow());
self_imp.reset_route_address.connect_changed(clone!(@weak self_imp => move |entry| {
let address_input = entry.text();
let mut conn = conn.borrow_mut();
@ -116,7 +116,7 @@ impl WifiRouteEntry {
if let Ok(address2) = Ipv4Addr::from_str(self_imp.reset_route_address.text().as_str()) {
if let Some(addr) = conn.ipv4.route_data.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string()) {
addr.prefix_length = prefix as u32;
addr.prefix = prefix as u32;
}
}
}
@ -126,7 +126,7 @@ impl WifiRouteEntry {
if let Ok(address2) = Ipv6Addr::from_str(self_imp.reset_route_address.text().as_str()) {
if let Some(addr) = conn.ipv6.route_data.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string()) {
addr.prefix_length = prefix as u32;
addr.prefix = prefix as u32;
}
}
}

View file

@ -228,7 +228,7 @@
(20,2,"AdwComboRow","reset_card_entry",None,None,None,None,None,None),
(21,1,"AdwNavigationPage","resetWifiOptions",None,None,None,None,-1,None),
(21,52,"GtkBox",None,1,None,None,None,-1,None),
(21,53,"GtkNotebook",None,52,None,None,None,None,None),
(21,53,"GtkNotebook",None,52,None,None,None,1,None),
(21,54,"GtkBox",None,53,None,None,None,None,None),
(21,55,"AdwPreferencesGroup",None,54,None,None,None,None,None),
(21,56,"AdwActionRow","reset_wifi_name",55,None,None,None,None,None),
@ -247,7 +247,6 @@
(21,69,"AdwComboRow","reset_ip4_method",68,None,None,None,None,None),
(21,70,"GtkStringList",None,69,None,None,None,None,None),
(21,71,"AdwEntryRow","reset_ip4_dns",68,None,None,None,1,None),
(21,72,"AdwEntryRow","reset_ip4_gateway",68,None,None,None,2,None),
(21,73,"AdwPreferencesGroup","reset_ip4_address_group",67,None,None,None,1,None),
(21,74,"AdwPreferencesGroup","reset_ip4_routes_group",67,None,None,None,2,None),
(21,75,"GtkBox",None,74,None,None,None,None,None),
@ -271,12 +270,18 @@
(21,93,"AdwComboRow","reset_wifi_security_dropdown",92,None,None,None,None,None),
(21,96,"AdwPasswordEntryRow","reset_wifi_password",92,None,None,None,1,None),
(21,97,"GtkLabel",None,53,None,"tab",None,7,None),
(21,98,"GtkButton","wifi_options_apply_button",52,None,None,None,1,None),
(21,99,"GtkButton","reset_ip4_address_add_button",73,None,None,None,-1,None),
(21,100,"GtkButton","reset_ip4_route_add_button",75,None,None,None,2,None),
(21,101,"GtkButton","reset_ip6_address_add_button",85,None,None,None,-1,None),
(21,102,"GtkButton","reset_ip6_route_add_button",87,None,None,None,2,None),
(21,103,"GtkStringList",None,93,None,None,None,-1,None),
(21,104,"GtkBox",None,52,None,None,None,2,None),
(21,105,"GtkButton","wifi_options_apply_button",104,None,None,None,1,None),
(21,106,"GtkLabel","wifi_options_error_msg",104,None,None,None,None,None),
(21,107,"AdwEntryRow","reset_ip4_gateway",73,None,None,None,None,None),
(21,108,"AdwPreferencesGroup",None,52,None,None,None,None,None),
(21,109,"AdwActionRow","reset_available_networks",108,None,None,None,None,None),
(21,110,"GtkImage",None,109,None,None,None,None,None),
(22,1,"GtkBox","resetWifiAddressEntry",None,None,None,None,-1,None),
(22,2,"AdwExpanderRow","reset_address_row",1,None,None,None,-1,None),
(22,5,"GtkButton","reset_address_remove",1,None,None,None,-1,None),
@ -722,6 +727,7 @@
(21,52,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,53,"GtkNotebook","scrollable","True",None,None,None,None,None,None,None,None,None),
(21,53,"GtkNotebook","show-border","False",None,None,None,None,None,None,None,None,None),
(21,53,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,54,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,54,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(21,56,"AdwPreferencesRow","title","WiFi Name",None,None,None,None,None,None,None,None,None),
@ -748,7 +754,6 @@
(21,69,"AdwComboRow","model",None,None,None,None,None,70,None,None,None,None),
(21,69,"AdwPreferencesRow","title","IPv4 Method",None,None,None,None,None,None,None,None,None),
(21,71,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None),
(21,72,"AdwPreferencesRow","title","Gateway",None,None,None,None,None,None,None,None,None),
(21,73,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,99,None,None,None,None),
(21,73,"AdwPreferencesGroup","title","Addresses",None,None,None,None,None,None,None,None,None),
(21,73,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
@ -781,15 +786,25 @@
(21,93,"AdwPreferencesRow","title","Security",None,None,None,None,None,None,None,None,None),
(21,96,"AdwPreferencesRow","title","Password",None,None,None,None,None,None,None,None,None),
(21,97,"GtkLabel","label","Security",None,None,None,None,None,None,None,None,None),
(21,98,"GtkButton","label","Apply",None,None,None,None,None,None,None,None,None),
(21,98,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(21,98,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,99,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None),
(21,100,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None),
(21,100,"GtkWidget","margin-start","10",None,None,None,None,None,None,None,None,None),
(21,101,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None),
(21,102,"GtkButton","icon-name","list-add-symbolic",None,None,None,None,None,None,None,None,None),
(21,102,"GtkWidget","margin-start","10",None,None,None,None,None,None,None,None,None),
(21,104,"GtkBox","spacing","10",None,None,None,None,None,None,None,None,None),
(21,104,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(21,104,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(21,105,"GtkButton","label","Apply",None,None,None,None,None,None,None,None,None),
(21,105,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(21,106,"GtkWidget","halign","center",None,None,None,None,None,None,None,None,None),
(21,106,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(21,107,"AdwPreferencesRow","title","Gateway",None,None,None,None,None,None,None,None,None),
(21,109,"AdwPreferencesRow","title","Available Networks",None,None,None,None,None,None,None,None,None),
(21,110,"GtkImage","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None),
(21,110,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(21,110,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(21,110,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(22,1,"GtkWidget","margin-bottom","2",None,None,None,None,None,None,None,None,None),
(22,1,"GtkWidget","margin-top","2",None,None,None,None,None,None,None,None,None),
(22,2,"AdwPreferencesRow","title","Add new Address",None,None,None,None,None,None,None,None,None),

View file

@ -7,8 +7,26 @@
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwActionRow" id="reset_available_networks">
<property name="title">Available Networks</property>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkNotebook">
<property name="margin-top">10</property>
<property name="scrollable">True</property>
<property name="show-border">False</property>
<child>
@ -111,11 +129,6 @@
<property name="title">DNS (separate IP by comma, empty for automatic)</property>
</object>
</child>
<child>
<object class="AdwEntryRow" id="reset_ip4_gateway">
<property name="title">Gateway</property>
</object>
</child>
</object>
</child>
<child>
@ -127,6 +140,11 @@
</property>
<property name="margin-top">10</property>
<property name="title">Addresses</property>
<child>
<object class="AdwEntryRow" id="reset_ip4_gateway">
<property name="title">Gateway</property>
</object>
</child>
</object>
</child>
<child>
@ -279,10 +297,22 @@
</object>
</child>
<child>
<object class="GtkButton" id="wifi_options_apply_button">
<object class="GtkBox">
<property name="halign">end</property>
<property name="label">Apply</property>
<property name="margin-top">10</property>
<property name="spacing">10</property>
<child>
<object class="GtkLabel" id="wifi_options_error_msg">
<property name="halign">center</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkButton" id="wifi_options_apply_button">
<property name="halign">end</property>
<property name="label">Apply</property>
</object>
</child>
</object>
</child>
</object>