From e03dad964b68be885346af18cf70bb60d630ae98 Mon Sep 17 00:00:00 2001 From: Fabio Lenherr / DashieTM Date: Tue, 5 Dec 2023 22:15:50 +0100 Subject: [PATCH] feat: Add proper wifi enable/disable --- Cargo.toml | 2 +- src/components/base/utils.rs | 7 ++--- src/components/wifi/wifi_box.rs | 46 ++++++++++++++++++++++++++------- src/resources/resetUI.cmb | 1 - src/resources/resetWifiEntry.ui | 1 - 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index dbee372..306a999 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" description = "A wip universal Linux settings application." [dependencies] -reset_daemon = "0.3.8" +reset_daemon = "0.4.0" ReSet-Lib = "0.6.3" adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] } dbus = "0.9.7" diff --git a/src/components/base/utils.rs b/src/components/base/utils.rs index 9cd886d..e332b6a 100644 --- a/src/components/base/utils.rs +++ b/src/components/base/utils.rs @@ -25,17 +25,18 @@ use crate::components::{ #[derive(Default)] pub struct Listeners { - pub network_listener: AtomicBool, + pub wifi_disabled: AtomicBool, + pub wifi_listener: AtomicBool, pub bluetooth_listener: AtomicBool, pub pulse_listener: AtomicBool, } impl Listeners { pub fn stop_network_listener(&self) { - if !self.network_listener.load(Ordering::SeqCst) { + if !self.wifi_listener.load(Ordering::SeqCst) { return; } - self.network_listener.store(false, Ordering::SeqCst); + self.wifi_listener.store(false, Ordering::SeqCst); thread::spawn(|| { let conn = Connection::new_session().unwrap(); let proxy = conn.with_proxy( diff --git a/src/components/wifi/wifi_box.rs b/src/components/wifi/wifi_box.rs index 6657c2c..631aa62 100644 --- a/src/components/wifi/wifi_box.rs +++ b/src/components/wifi/wifi_box.rs @@ -48,6 +48,7 @@ impl WifiBox { } fn setup_callbacks(listeners: Arc, wifi_box: Arc) -> Arc { + let wifi_status = get_wifi_status(); let imp = wifi_box.imp(); let wifibox_ref = wifi_box.clone(); imp.reset_saved_networks.set_activatable(true); @@ -56,6 +57,10 @@ fn setup_callbacks(listeners: Arc, wifi_box: Arc) -> Arc, wifi_box: Arc) -> Arc) { let list = imp.reset_model_list.read().unwrap(); imp.reset_wifi_device.set_model(Some(&*list)); let map = imp.reset_wifi_devices.read().unwrap(); - let device = imp.reset_current_wifi_device.borrow(); - if let Some(index) = map.get(&device.name) { - imp.reset_wifi_device.set_selected(index.1); + { + let device = imp.reset_current_wifi_device.borrow(); + if let Some(index) = map.get(&device.name) { + imp.reset_wifi_device.set_selected(index.1); + } } - imp.reset_wifi_device - .connect_selected_notify(clone!(@weak imp => move |dropdown| { + + imp.reset_wifi_device.connect_selected_notify( + clone!(@weak imp => move |dropdown| { let selected = dropdown.selected_item(); if selected.is_none() { return; @@ -136,7 +144,8 @@ pub fn scan_for_wifi(wifi_box: Arc) { return; } set_wifi_device(device.unwrap().0.path.clone()); - })); + }), + ); for access_point in access_points { let ssid = access_point.ssid.clone(); let path = access_point.dbus_path.clone(); @@ -225,6 +234,21 @@ pub fn get_wifi_devices() -> Vec { devices } +pub fn get_wifi_status() -> bool { + let conn = Connection::new_session().unwrap(); + let proxy = conn.with_proxy( + "org.Xetibo.ReSetDaemon", + "/org/Xetibo/ReSetDaemon", + Duration::from_millis(1000), + ); + let res: Result<(bool,), Error> = + proxy.method_call("org.Xetibo.ReSetWireless", "GetWifiStatus", ()); + if res.is_err() { + return false; + } + res.unwrap().0 +} + pub fn get_stored_connections() -> Vec<(Path<'static>, Vec)> { let conn = Connection::new_session().unwrap(); let proxy = conn.with_proxy( @@ -254,10 +278,12 @@ pub fn set_wifi_enabled(enabled: bool) { pub fn start_event_listener(listeners: Arc, wifi_box: Arc) { gio::spawn_blocking(move || { - if listeners.network_listener.load(Ordering::SeqCst) { + if listeners.wifi_disabled.load(Ordering::SeqCst) + || listeners.wifi_listener.load(Ordering::SeqCst) + { return; } - listeners.network_listener.store(true, Ordering::SeqCst); + listeners.wifi_listener.store(true, Ordering::SeqCst); let conn = Connection::new_session().unwrap(); let added_ref = wifi_box.clone(); @@ -419,7 +445,7 @@ pub fn start_event_listener(listeners: Arc, wifi_box: Arc) { println!("starting thread listener"); loop { let _ = conn.process(Duration::from_millis(1000)); - if !listeners.network_listener.load(Ordering::SeqCst) { + if !listeners.wifi_listener.load(Ordering::SeqCst) { println!("stopping thread listener"); break; } diff --git a/src/resources/resetUI.cmb b/src/resources/resetUI.cmb index add0ef5..f4a01b9 100644 --- a/src/resources/resetUI.cmb +++ b/src/resources/resetUI.cmb @@ -443,7 +443,6 @@ (5,20,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None), (5,20,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), (5,22,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None), - (5,22,"GtkLabel","label","Connected",None,None,None,None,None,None,None,None,None), (5,22,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None), (5,22,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None), (5,22,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None), diff --git a/src/resources/resetWifiEntry.ui b/src/resources/resetWifiEntry.ui index 12a439b..791b713 100644 --- a/src/resources/resetWifiEntry.ui +++ b/src/resources/resetWifiEntry.ui @@ -42,7 +42,6 @@ end True right - Connected 10 True 0.0