mirror of
				https://github.com/Xetibo/ReSet.git
				synced 2025-11-04 09:45:19 +01:00 
			
		
		
		
	feat: Add proper wifi enable/disable
This commit is contained in:
		
							parent
							
								
									ce91201192
								
							
						
					
					
						commit
						e03dad964b
					
				
					 5 changed files with 41 additions and 16 deletions
				
			
		| 
						 | 
					@ -5,7 +5,7 @@ edition = "2021"
 | 
				
			||||||
description = "A wip universal Linux settings application."
 | 
					description = "A wip universal Linux settings application."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
reset_daemon = "0.3.8"
 | 
					reset_daemon = "0.4.0"
 | 
				
			||||||
ReSet-Lib = "0.6.3"
 | 
					ReSet-Lib = "0.6.3"
 | 
				
			||||||
adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] }
 | 
					adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] }
 | 
				
			||||||
dbus = "0.9.7"
 | 
					dbus = "0.9.7"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,17 +25,18 @@ use crate::components::{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Default)]
 | 
					#[derive(Default)]
 | 
				
			||||||
pub struct Listeners {
 | 
					pub struct Listeners {
 | 
				
			||||||
    pub network_listener: AtomicBool,
 | 
					    pub wifi_disabled: AtomicBool,
 | 
				
			||||||
 | 
					    pub wifi_listener: AtomicBool,
 | 
				
			||||||
    pub bluetooth_listener: AtomicBool,
 | 
					    pub bluetooth_listener: AtomicBool,
 | 
				
			||||||
    pub pulse_listener: AtomicBool,
 | 
					    pub pulse_listener: AtomicBool,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Listeners {
 | 
					impl Listeners {
 | 
				
			||||||
    pub fn stop_network_listener(&self) {
 | 
					    pub fn stop_network_listener(&self) {
 | 
				
			||||||
        if !self.network_listener.load(Ordering::SeqCst) {
 | 
					        if !self.wifi_listener.load(Ordering::SeqCst) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        self.network_listener.store(false, Ordering::SeqCst);
 | 
					        self.wifi_listener.store(false, Ordering::SeqCst);
 | 
				
			||||||
        thread::spawn(|| {
 | 
					        thread::spawn(|| {
 | 
				
			||||||
            let conn = Connection::new_session().unwrap();
 | 
					            let conn = Connection::new_session().unwrap();
 | 
				
			||||||
            let proxy = conn.with_proxy(
 | 
					            let proxy = conn.with_proxy(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,6 +48,7 @@ impl WifiBox {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn setup_callbacks(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) -> Arc<WifiBox> {
 | 
					fn setup_callbacks(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) -> Arc<WifiBox> {
 | 
				
			||||||
 | 
					    let wifi_status = get_wifi_status();
 | 
				
			||||||
    let imp = wifi_box.imp();
 | 
					    let imp = wifi_box.imp();
 | 
				
			||||||
    let wifibox_ref = wifi_box.clone();
 | 
					    let wifibox_ref = wifi_box.clone();
 | 
				
			||||||
    imp.reset_saved_networks.set_activatable(true);
 | 
					    imp.reset_saved_networks.set_activatable(true);
 | 
				
			||||||
| 
						 | 
					@ -56,6 +57,10 @@ fn setup_callbacks(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) -> Arc<Wif
 | 
				
			||||||
    imp.reset_saved_networks
 | 
					    imp.reset_saved_networks
 | 
				
			||||||
        .set_action_target_value(Some(&Variant::from("saved")));
 | 
					        .set_action_target_value(Some(&Variant::from("saved")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("{wifi_status}");
 | 
				
			||||||
 | 
					    imp.reset_wifi_switch.set_active(wifi_status);
 | 
				
			||||||
 | 
					    imp.reset_wifi_switch.set_state(wifi_status);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    imp.reset_available_networks.set_activatable(true);
 | 
					    imp.reset_available_networks.set_activatable(true);
 | 
				
			||||||
    imp.reset_available_networks
 | 
					    imp.reset_available_networks
 | 
				
			||||||
        .set_action_name(Some("navigation.pop"));
 | 
					        .set_action_name(Some("navigation.pop"));
 | 
				
			||||||
| 
						 | 
					@ -70,7 +75,7 @@ fn setup_callbacks(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) -> Arc<Wif
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                map.clear();
 | 
					                map.clear();
 | 
				
			||||||
                imp.wifi_entries_path.lock().unwrap().clear();
 | 
					                imp.wifi_entries_path.lock().unwrap().clear();
 | 
				
			||||||
                listeners.network_listener.store(false, Ordering::SeqCst);
 | 
					                listeners.wifi_listener.store(false, Ordering::SeqCst);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                start_event_listener(listeners.clone(), wifibox_ref.clone());
 | 
					                start_event_listener(listeners.clone(), wifibox_ref.clone());
 | 
				
			||||||
                show_stored_connections(wifibox_ref.clone());
 | 
					                show_stored_connections(wifibox_ref.clone());
 | 
				
			||||||
| 
						 | 
					@ -116,12 +121,15 @@ pub fn scan_for_wifi(wifi_box: Arc<WifiBox>) {
 | 
				
			||||||
                let list = imp.reset_model_list.read().unwrap();
 | 
					                let list = imp.reset_model_list.read().unwrap();
 | 
				
			||||||
                imp.reset_wifi_device.set_model(Some(&*list));
 | 
					                imp.reset_wifi_device.set_model(Some(&*list));
 | 
				
			||||||
                let map = imp.reset_wifi_devices.read().unwrap();
 | 
					                let map = imp.reset_wifi_devices.read().unwrap();
 | 
				
			||||||
                let device = imp.reset_current_wifi_device.borrow();
 | 
					                {
 | 
				
			||||||
                if let Some(index) = map.get(&device.name) {
 | 
					                    let device = imp.reset_current_wifi_device.borrow();
 | 
				
			||||||
                    imp.reset_wifi_device.set_selected(index.1);
 | 
					                    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();
 | 
					                        let selected = dropdown.selected_item();
 | 
				
			||||||
                        if selected.is_none() {
 | 
					                        if selected.is_none() {
 | 
				
			||||||
                            return;
 | 
					                            return;
 | 
				
			||||||
| 
						 | 
					@ -136,7 +144,8 @@ pub fn scan_for_wifi(wifi_box: Arc<WifiBox>) {
 | 
				
			||||||
                            return;
 | 
					                            return;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        set_wifi_device(device.unwrap().0.path.clone());
 | 
					                        set_wifi_device(device.unwrap().0.path.clone());
 | 
				
			||||||
                    }));
 | 
					                    }),
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
                for access_point in access_points {
 | 
					                for access_point in access_points {
 | 
				
			||||||
                    let ssid = access_point.ssid.clone();
 | 
					                    let ssid = access_point.ssid.clone();
 | 
				
			||||||
                    let path = access_point.dbus_path.clone();
 | 
					                    let path = access_point.dbus_path.clone();
 | 
				
			||||||
| 
						 | 
					@ -225,6 +234,21 @@ pub fn get_wifi_devices() -> Vec<WifiDevice> {
 | 
				
			||||||
    devices
 | 
					    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<u8>)> {
 | 
					pub fn get_stored_connections() -> Vec<(Path<'static>, Vec<u8>)> {
 | 
				
			||||||
    let conn = Connection::new_session().unwrap();
 | 
					    let conn = Connection::new_session().unwrap();
 | 
				
			||||||
    let proxy = conn.with_proxy(
 | 
					    let proxy = conn.with_proxy(
 | 
				
			||||||
| 
						 | 
					@ -254,10 +278,12 @@ pub fn set_wifi_enabled(enabled: bool) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
 | 
					pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
 | 
				
			||||||
    gio::spawn_blocking(move || {
 | 
					    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;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        listeners.network_listener.store(true, Ordering::SeqCst);
 | 
					        listeners.wifi_listener.store(true, Ordering::SeqCst);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let conn = Connection::new_session().unwrap();
 | 
					        let conn = Connection::new_session().unwrap();
 | 
				
			||||||
        let added_ref = wifi_box.clone();
 | 
					        let added_ref = wifi_box.clone();
 | 
				
			||||||
| 
						 | 
					@ -419,7 +445,7 @@ pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
 | 
				
			||||||
        println!("starting thread listener");
 | 
					        println!("starting thread listener");
 | 
				
			||||||
        loop {
 | 
					        loop {
 | 
				
			||||||
            let _ = conn.process(Duration::from_millis(1000));
 | 
					            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");
 | 
					                println!("stopping thread listener");
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -443,7 +443,6 @@
 | 
				
			||||||
	(5,20,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
 | 
						(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,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","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","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,"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),
 | 
						(5,22,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,7 +42,6 @@
 | 
				
			||||||
            <property name="halign">end</property>
 | 
					            <property name="halign">end</property>
 | 
				
			||||||
            <property name="hexpand">True</property>
 | 
					            <property name="hexpand">True</property>
 | 
				
			||||||
            <property name="justify">right</property>
 | 
					            <property name="justify">right</property>
 | 
				
			||||||
            <property name="label">Connected</property>
 | 
					 | 
				
			||||||
            <property name="margin-end">10</property>
 | 
					            <property name="margin-end">10</property>
 | 
				
			||||||
            <property name="single-line-mode">True</property>
 | 
					            <property name="single-line-mode">True</property>
 | 
				
			||||||
            <property name="xalign">0.0</property>
 | 
					            <property name="xalign">0.0</property>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue