mirror of
				https://github.com/Xetibo/ReSet.git
				synced 2025-11-04 09:45:19 +01:00 
			
		
		
		
	feat: Add saved WifiList
This commit is contained in:
		
							parent
							
								
									bbfd07688d
								
							
						
					
					
						commit
						9cad376a40
					
				
					 13 changed files with 372 additions and 126 deletions
				
			
		| 
						 | 
					@ -9,7 +9,8 @@ use gtk::gdk_pixbuf::subclass::prelude::{
 | 
				
			||||||
use gtk::prelude::PopupExt;
 | 
					use gtk::prelude::PopupExt;
 | 
				
			||||||
use gtk::subclass::prelude::*;
 | 
					use gtk::subclass::prelude::*;
 | 
				
			||||||
use gtk::{
 | 
					use gtk::{
 | 
				
			||||||
    gdk, glib, Button, CompositeTemplate, Entry, EntryBuffer, PasswordEntry, PasswordEntryBuffer, Popover,
 | 
					    gdk, glib, Button, CompositeTemplate, Entry, EntryBuffer, Label, PasswordEntry,
 | 
				
			||||||
 | 
					    PasswordEntryBuffer, Popover,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::popup;
 | 
					use super::popup;
 | 
				
			||||||
| 
						 | 
					@ -18,6 +19,8 @@ use super::popup;
 | 
				
			||||||
#[derive(Default, CompositeTemplate)]
 | 
					#[derive(Default, CompositeTemplate)]
 | 
				
			||||||
#[template(resource = "/org/Xetibo/ReSet/resetPopup.ui")]
 | 
					#[template(resource = "/org/Xetibo/ReSet/resetPopup.ui")]
 | 
				
			||||||
pub struct Popup {
 | 
					pub struct Popup {
 | 
				
			||||||
 | 
					    #[template_child]
 | 
				
			||||||
 | 
					    pub resetPopupLabel: TemplateChild<Label>,
 | 
				
			||||||
    #[template_child]
 | 
					    #[template_child]
 | 
				
			||||||
    pub resetPopupEntry: TemplateChild<PasswordEntry>,
 | 
					    pub resetPopupEntry: TemplateChild<PasswordEntry>,
 | 
				
			||||||
    #[template_child]
 | 
					    #[template_child]
 | 
				
			||||||
| 
						 | 
					@ -25,6 +28,9 @@ pub struct Popup {
 | 
				
			||||||
    pub resetPopupText: Arc<RefCell<PasswordEntryBuffer>>,
 | 
					    pub resetPopupText: Arc<RefCell<PasswordEntryBuffer>>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsafe impl Send for Popup {}
 | 
				
			||||||
 | 
					unsafe impl Sync for Popup {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[glib::object_subclass]
 | 
					#[glib::object_subclass]
 | 
				
			||||||
impl ObjectSubclass for Popup {
 | 
					impl ObjectSubclass for Popup {
 | 
				
			||||||
    const NAME: &'static str = "resetPopup";
 | 
					    const NAME: &'static str = "resetPopup";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,7 @@
 | 
				
			||||||
#![allow(non_snake_case)]
 | 
					#![allow(non_snake_case)]
 | 
				
			||||||
 | 
					pub mod savedWifiEntry;
 | 
				
			||||||
pub mod wifiBox;
 | 
					pub mod wifiBox;
 | 
				
			||||||
pub mod wifiBoxImpl;
 | 
					pub mod wifiBoxImpl;
 | 
				
			||||||
pub mod wifiEntry;
 | 
					pub mod wifiEntry;
 | 
				
			||||||
pub mod wifiEntryImpl;
 | 
					pub mod wifiEntryImpl;
 | 
				
			||||||
 | 
					pub mod savedWifiEntryImpl;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										46
									
								
								src/components/wifi/savedWifiEntry.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/components/wifi/savedWifiEntry.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					use std::time::Duration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::components::wifi::savedWifiEntryImpl;
 | 
				
			||||||
 | 
					use adw::glib;
 | 
				
			||||||
 | 
					use adw::glib::Object;
 | 
				
			||||||
 | 
					use adw::prelude::{ButtonExt, WidgetExt};
 | 
				
			||||||
 | 
					use dbus::{Error, Path};
 | 
				
			||||||
 | 
					use dbus::blocking::Connection;
 | 
				
			||||||
 | 
					use glib::{clone, PropertySet};
 | 
				
			||||||
 | 
					use glib::subclass::types::ObjectSubclassIsExt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					glib::wrapper! {
 | 
				
			||||||
 | 
					    pub struct SavedWifiEntry(ObjectSubclass<savedWifiEntryImpl::SavedWifiEntry>)
 | 
				
			||||||
 | 
					        @extends gtk::Box, gtk::Widget,
 | 
				
			||||||
 | 
					        @implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl SavedWifiEntry {
 | 
				
			||||||
 | 
					    pub fn new(name: &String, path: Path<'static>) -> Self {
 | 
				
			||||||
 | 
					        let entry: SavedWifiEntry = Object::builder().build();
 | 
				
			||||||
 | 
					        let entryImp = entry.imp();
 | 
				
			||||||
 | 
					        // TODO handle edit
 | 
				
			||||||
 | 
					        entryImp.resetSavedWifiLabel.set_text(name);
 | 
				
			||||||
 | 
					        entryImp.resetConnectionPath.set(path);
 | 
				
			||||||
 | 
					        entryImp.resetDeleteSavedWifiButton.connect_clicked(clone!(@weak entry as entry => move |_| {
 | 
				
			||||||
 | 
					        let conn = Connection::new_session().unwrap();
 | 
				
			||||||
 | 
					        let proxy = conn.with_proxy(
 | 
				
			||||||
 | 
					            "org.xetibo.ReSet",
 | 
				
			||||||
 | 
					            "/org/xetibo/ReSet",
 | 
				
			||||||
 | 
					            Duration::from_millis(1000),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        let res: Result<(bool,), Error> = proxy.method_call("org.xetibo.ReSet", "DeleteConnection", (entry.imp().resetConnectionPath.take(),));
 | 
				
			||||||
 | 
					        if res.is_err() || res.unwrap() == (false,) { 
 | 
				
			||||||
 | 
					            // TODO handle error -> inform user
 | 
				
			||||||
 | 
					            println!("no worky");
 | 
				
			||||||
 | 
					           return; 
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        println!("worked, should be ded");
 | 
				
			||||||
 | 
					        let parent = entry.parent().unwrap();
 | 
				
			||||||
 | 
					        parent.set_visible(false);
 | 
				
			||||||
 | 
					        parent.unparent();
 | 
				
			||||||
 | 
					        }));
 | 
				
			||||||
 | 
					        entry
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								src/components/wifi/savedWifiEntryImpl.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/components/wifi/savedWifiEntryImpl.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					use std::cell::RefCell;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use dbus::Path;
 | 
				
			||||||
 | 
					use gtk::subclass::prelude::*;
 | 
				
			||||||
 | 
					use gtk::{glib, Button, CompositeTemplate, Label};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use super::savedWifiEntry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[allow(non_snake_case)]
 | 
				
			||||||
 | 
					#[derive(Default, CompositeTemplate)]
 | 
				
			||||||
 | 
					#[template(resource = "/org/Xetibo/ReSet/resetSavedWifiEntry.ui")]
 | 
				
			||||||
 | 
					pub struct SavedWifiEntry {
 | 
				
			||||||
 | 
					    #[template_child]
 | 
				
			||||||
 | 
					    pub resetDeleteSavedWifiButton: TemplateChild<Button>,
 | 
				
			||||||
 | 
					    #[template_child]
 | 
				
			||||||
 | 
					    pub resetEditSavedWifiButton: TemplateChild<Button>,
 | 
				
			||||||
 | 
					    #[template_child]
 | 
				
			||||||
 | 
					    pub resetSavedWifiLabel: TemplateChild<Label>,
 | 
				
			||||||
 | 
					    pub resetConnectionPath: RefCell<Path<'static>>,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsafe impl Send for SavedWifiEntry {}
 | 
				
			||||||
 | 
					unsafe impl Sync for SavedWifiEntry {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[glib::object_subclass]
 | 
				
			||||||
 | 
					impl ObjectSubclass for SavedWifiEntry {
 | 
				
			||||||
 | 
					    const NAME: &'static str = "resetSavedWifiEntry";
 | 
				
			||||||
 | 
					    type Type = savedWifiEntry::SavedWifiEntry;
 | 
				
			||||||
 | 
					    type ParentType = gtk::Box;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn class_init(klass: &mut Self::Class) {
 | 
				
			||||||
 | 
					        klass.bind_template();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
 | 
				
			||||||
 | 
					        obj.init_template();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl ObjectImpl for SavedWifiEntry {
 | 
				
			||||||
 | 
					    fn constructed(&self) {
 | 
				
			||||||
 | 
					        self.parent_constructed();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl BoxImpl for SavedWifiEntry {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl WidgetImpl for SavedWifiEntry {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl WindowImpl for SavedWifiEntry {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl ApplicationWindowImpl for SavedWifiEntry {}
 | 
				
			||||||
| 
						 | 
					@ -6,12 +6,14 @@ use std::time::Duration;
 | 
				
			||||||
use crate::components::base::listEntry::ListEntry;
 | 
					use crate::components::base::listEntry::ListEntry;
 | 
				
			||||||
use adw::glib;
 | 
					use adw::glib;
 | 
				
			||||||
use adw::glib::Object;
 | 
					use adw::glib::Object;
 | 
				
			||||||
 | 
					use adw::prelude::{BoxExt, ButtonExt, ListBoxRowExt};
 | 
				
			||||||
use adw::subclass::prelude::ObjectSubclassIsExt;
 | 
					use adw::subclass::prelude::ObjectSubclassIsExt;
 | 
				
			||||||
use dbus::blocking::Connection;
 | 
					use dbus::blocking::Connection;
 | 
				
			||||||
use dbus::Error;
 | 
					use dbus::Error;
 | 
				
			||||||
use dbus::Path;
 | 
					use dbus::Path;
 | 
				
			||||||
use gtk::glib::{clone, Variant};
 | 
					use gtk::glib::{clone, Variant};
 | 
				
			||||||
use gtk::prelude::ActionableExt;
 | 
					use gtk::prelude::ActionableExt;
 | 
				
			||||||
 | 
					use gtk::{Button, Label, Orientation};
 | 
				
			||||||
use ReSet_Lib::network::network::{AccessPoint, WifiStrength};
 | 
					use ReSet_Lib::network::network::{AccessPoint, WifiStrength};
 | 
				
			||||||
use ReSet_Lib::signals::{
 | 
					use ReSet_Lib::signals::{
 | 
				
			||||||
    AccessPointAdded, AccessPointRemoved, BluetoothDeviceAdded, BluetoothDeviceRemoved,
 | 
					    AccessPointAdded, AccessPointRemoved, BluetoothDeviceAdded, BluetoothDeviceRemoved,
 | 
				
			||||||
| 
						 | 
					@ -21,6 +23,8 @@ use ReSet_Lib::utils::Events;
 | 
				
			||||||
use crate::components::wifi::wifiBoxImpl;
 | 
					use crate::components::wifi::wifiBoxImpl;
 | 
				
			||||||
use crate::components::wifi::wifiEntry::WifiEntry;
 | 
					use crate::components::wifi::wifiEntry::WifiEntry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use super::savedWifiEntry::SavedWifiEntry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
glib::wrapper! {
 | 
					glib::wrapper! {
 | 
				
			||||||
    pub struct WifiBox(ObjectSubclass<wifiBoxImpl::WifiBox>)
 | 
					    pub struct WifiBox(ObjectSubclass<wifiBoxImpl::WifiBox>)
 | 
				
			||||||
    @extends gtk::Box, gtk::Widget,
 | 
					    @extends gtk::Box, gtk::Widget,
 | 
				
			||||||
| 
						 | 
					@ -46,18 +50,18 @@ impl WifiBox {
 | 
				
			||||||
            .set_action_target_value(Some(&Variant::from("saved")));
 | 
					            .set_action_target_value(Some(&Variant::from("saved")));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn donotdisturb() {
 | 
					    // pub fn donotdisturb() {
 | 
				
			||||||
        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(
 | 
				
			||||||
                "org.freedesktop.Notifications",
 | 
					    //             "org.freedesktop.Notifications",
 | 
				
			||||||
                "/org/freedesktop/Notifications",
 | 
					    //             "/org/freedesktop/Notifications",
 | 
				
			||||||
                Duration::from_millis(1000),
 | 
					    //             Duration::from_millis(1000),
 | 
				
			||||||
            );
 | 
					    //         );
 | 
				
			||||||
            let _: Result<(), Error> =
 | 
					    //         let _: Result<(), Error> =
 | 
				
			||||||
                proxy.method_call("org.freedesktop.Notifications", "DoNotDisturb", ());
 | 
					    //             proxy.method_call("org.freedesktop.Notifications", "DoNotDisturb", ());
 | 
				
			||||||
        });
 | 
					    //     });
 | 
				
			||||||
    }
 | 
					    // }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn scanForWifi(wifiBox: Arc<WifiBox>) {
 | 
					pub fn scanForWifi(wifiBox: Arc<WifiBox>) {
 | 
				
			||||||
| 
						 | 
					@ -65,7 +69,7 @@ pub fn scanForWifi(wifiBox: Arc<WifiBox>) {
 | 
				
			||||||
    let wifiEntries = wifiBox.imp().wifiEntries.clone();
 | 
					    let wifiEntries = wifiBox.imp().wifiEntries.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glib::spawn_future_local(async move {
 | 
					    glib::spawn_future_local(async move {
 | 
				
			||||||
        let accessPoints = wat().await;
 | 
					        let accessPoints = get_access_points().await;
 | 
				
			||||||
        let wifiEntries = wifiEntries.clone();
 | 
					        let wifiEntries = wifiEntries.clone();
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            let mut wifiEntries = wifiEntries.lock().unwrap();
 | 
					            let mut wifiEntries = wifiEntries.lock().unwrap();
 | 
				
			||||||
| 
						 | 
					@ -110,7 +114,36 @@ pub fn scanForWifi(wifiBox: Arc<WifiBox>) {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn wat() -> Vec<AccessPoint> {
 | 
					pub fn show_stored_connections(wifiBox: Arc<WifiBox>) {
 | 
				
			||||||
 | 
					    let wifibox_ref = wifiBox.clone();
 | 
				
			||||||
 | 
					    let wifiEntries = wifiBox.imp().savedWifiEntries.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    glib::spawn_future_local(async move {
 | 
				
			||||||
 | 
					        let connections = get_stored_connections().await;
 | 
				
			||||||
 | 
					        let wifiEntries = wifiEntries.clone();
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            let mut wifiEntries = wifiEntries.lock().unwrap();
 | 
				
			||||||
 | 
					            for connection in connections {
 | 
				
			||||||
 | 
					                // TODO include button for settings
 | 
				
			||||||
 | 
					                let name = &String::from_utf8(connection.1).unwrap_or_else(|_| String::from(""));
 | 
				
			||||||
 | 
					                let entry = ListEntry::new(&SavedWifiEntry::new(name, connection.0));
 | 
				
			||||||
 | 
					                entry.set_activatable(false);
 | 
				
			||||||
 | 
					                wifiEntries.push(entry);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        glib::MainContext::default().spawn_local(async move {
 | 
				
			||||||
 | 
					            glib::idle_add_once(move || {
 | 
				
			||||||
 | 
					                let wifiEntries = wifiEntries.lock().unwrap();
 | 
				
			||||||
 | 
					                let selfImp = wifibox_ref.imp();
 | 
				
			||||||
 | 
					                for wifiEntry in wifiEntries.iter() {
 | 
				
			||||||
 | 
					                    selfImp.resetStoredWifiList.append(wifiEntry);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub async fn get_access_points() -> Vec<AccessPoint> {
 | 
				
			||||||
    let conn = Connection::new_session().unwrap();
 | 
					    let conn = Connection::new_session().unwrap();
 | 
				
			||||||
    let proxy = conn.with_proxy(
 | 
					    let proxy = conn.with_proxy(
 | 
				
			||||||
        "org.xetibo.ReSet",
 | 
					        "org.xetibo.ReSet",
 | 
				
			||||||
| 
						 | 
					@ -125,3 +158,21 @@ pub async fn wat() -> Vec<AccessPoint> {
 | 
				
			||||||
    let (accessPoints,) = res.unwrap();
 | 
					    let (accessPoints,) = res.unwrap();
 | 
				
			||||||
    accessPoints
 | 
					    accessPoints
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub async fn get_stored_connections() -> Vec<(Path<'static>, Vec<u8>)> {
 | 
				
			||||||
 | 
					    let conn = Connection::new_session().unwrap();
 | 
				
			||||||
 | 
					    let proxy = conn.with_proxy(
 | 
				
			||||||
 | 
					        "org.xetibo.ReSet",
 | 
				
			||||||
 | 
					        "/org/xetibo/ReSet",
 | 
				
			||||||
 | 
					        Duration::from_millis(1000),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    let res: Result<(Vec<(Path<'static>, Vec<u8>)>,), Error> =
 | 
				
			||||||
 | 
					        proxy.method_call("org.xetibo.ReSet", "ListStoredConnections", ());
 | 
				
			||||||
 | 
					    if res.is_err() {
 | 
				
			||||||
 | 
					        println!("we got error...");
 | 
				
			||||||
 | 
					        return Vec::new();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    let (connections,) = res.unwrap();
 | 
				
			||||||
 | 
					    dbg!(connections.clone());
 | 
				
			||||||
 | 
					    connections
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,10 @@ pub struct WifiBox {
 | 
				
			||||||
    pub resetWifiList: TemplateChild<ListBox>,
 | 
					    pub resetWifiList: TemplateChild<ListBox>,
 | 
				
			||||||
    #[template_child]
 | 
					    #[template_child]
 | 
				
			||||||
    pub resetWifiAdvanced: TemplateChild<Button>,
 | 
					    pub resetWifiAdvanced: TemplateChild<Button>,
 | 
				
			||||||
 | 
					    #[template_child]
 | 
				
			||||||
 | 
					    pub resetStoredWifiList: TemplateChild<ListBox>,
 | 
				
			||||||
    pub wifiEntries: Arc<Mutex<Vec<ListEntry>>>,
 | 
					    pub wifiEntries: Arc<Mutex<Vec<ListEntry>>>,
 | 
				
			||||||
 | 
					    pub savedWifiEntries: Arc<Mutex<Vec<ListEntry>>>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsafe impl Send for WifiBox {}
 | 
					unsafe impl Send for WifiBox {}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -141,38 +141,54 @@ pub fn click_stored_network(entry: Arc<WifiEntry>) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn click_new_network(entry: Arc<WifiEntry>) {
 | 
					pub fn click_new_network(entry: Arc<WifiEntry>) {
 | 
				
			||||||
    let connect_new_network =
 | 
					    let connect_new_network =
 | 
				
			||||||
        |entry: Arc<WifiEntry>, access_point: AccessPoint, password: String| -> bool {
 | 
					        |result: Arc<AtomicBool>, entry: Arc<WifiEntry>, access_point: AccessPoint, password: String| {
 | 
				
			||||||
            let alert = AlertDialog::builder().build();
 | 
					            let entry_ref = entry.clone();
 | 
				
			||||||
            let root = &entry.root().unwrap();
 | 
					            let popup = entry.imp().resetWifiPopup.imp();
 | 
				
			||||||
            let root = root.downcast_ref::<gtk::Window>();
 | 
					            popup.resetPopupLabel.set_text("Connecting...");
 | 
				
			||||||
            if root.is_none() {
 | 
					            popup.resetPopupLabel.set_visible(true);
 | 
				
			||||||
                println!("ERROR BRO");
 | 
					            popup.resetPopupEntry.set_sensitive(false);
 | 
				
			||||||
                return false;
 | 
					            popup.resetPopupButton.set_sensitive(false);
 | 
				
			||||||
            }
 | 
					
 | 
				
			||||||
            let root = root.unwrap();
 | 
					            glib::spawn_future_local(async move {
 | 
				
			||||||
            let conn = Connection::new_session().unwrap();
 | 
					                let conn = Connection::new_session().unwrap();
 | 
				
			||||||
            let proxy = conn.with_proxy(
 | 
					                let proxy = conn.with_proxy(
 | 
				
			||||||
                "org.xetibo.ReSet",
 | 
					                    "org.xetibo.ReSet",
 | 
				
			||||||
                "/org/xetibo/ReSet",
 | 
					                    "/org/xetibo/ReSet",
 | 
				
			||||||
                Duration::from_millis(10000),
 | 
					                    Duration::from_millis(10000),
 | 
				
			||||||
            );
 | 
					                );
 | 
				
			||||||
 | 
					                let res: Result<(bool,), Error> = proxy.method_call(
 | 
				
			||||||
 | 
					                    "org.xetibo.ReSet",
 | 
				
			||||||
 | 
					                    "ConnectToNewAccessPoint",
 | 
				
			||||||
 | 
					                    (access_point, password),
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					                glib::MainContext::default().spawn_local(async move {
 | 
				
			||||||
 | 
					                    glib::idle_add_once(move || {
 | 
				
			||||||
 | 
					                        if res.is_err() {
 | 
				
			||||||
 | 
					                            entry_ref
 | 
				
			||||||
 | 
					                                .imp()
 | 
				
			||||||
 | 
					                                .resetWifiPopup
 | 
				
			||||||
 | 
					                                .imp()
 | 
				
			||||||
 | 
					                                .resetPopupLabel
 | 
				
			||||||
 | 
					                                .set_text("Could not connect to dbus.");
 | 
				
			||||||
 | 
					                            result.store(false, std::sync::atomic::Ordering::SeqCst);
 | 
				
			||||||
 | 
					                            return;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        if res.unwrap() == (false,) {
 | 
				
			||||||
 | 
					                            entry_ref
 | 
				
			||||||
 | 
					                                .imp()
 | 
				
			||||||
 | 
					                                .resetWifiPopup
 | 
				
			||||||
 | 
					                                .imp()
 | 
				
			||||||
 | 
					                                .resetPopupLabel
 | 
				
			||||||
 | 
					                                .set_text("Could not connect to access point.");
 | 
				
			||||||
 | 
					                            result.store(false, std::sync::atomic::Ordering::SeqCst);
 | 
				
			||||||
 | 
					                            return;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        entry_ref.imp().resetWifiPopup.popdown();
 | 
				
			||||||
 | 
					                        result.store(true, std::sync::atomic::Ordering::SeqCst);
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
            // TODO crate spinner animation and block UI
 | 
					            // TODO crate spinner animation and block UI
 | 
				
			||||||
            let res: Result<(bool,), Error> = proxy.method_call(
 | 
					 | 
				
			||||||
                "org.xetibo.ReSet",
 | 
					 | 
				
			||||||
                "ConnectToNewAccessPoint",
 | 
					 | 
				
			||||||
                (access_point, password),
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
            if res.is_err() {
 | 
					 | 
				
			||||||
                alert.set_message("Could not connect to dbus.");
 | 
					 | 
				
			||||||
                alert.show(Some(root));
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if res.unwrap() == (false,) {
 | 
					 | 
				
			||||||
                alert.set_message("Could not connect to access point.");
 | 
					 | 
				
			||||||
                alert.show(Some(root));
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            true
 | 
					 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let result = Arc::new(AtomicBool::new(false));
 | 
					    let result = Arc::new(AtomicBool::new(false));
 | 
				
			||||||
| 
						 | 
					@ -183,22 +199,14 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
 | 
				
			||||||
    popupImp
 | 
					    popupImp
 | 
				
			||||||
        .resetPopupEntry
 | 
					        .resetPopupEntry
 | 
				
			||||||
        .connect_activate(clone!(@weak entry as origEntry, @weak entryImp => move |entry| {
 | 
					        .connect_activate(clone!(@weak entry as origEntry, @weak entryImp => move |entry| {
 | 
				
			||||||
            result_ref.store(
 | 
					                connect_new_network(result_ref.clone(), origEntry, entryImp.accessPoint.clone().take(), entry.text().to_string());
 | 
				
			||||||
                connect_new_network(origEntry, entryImp.accessPoint.clone().take(), entry.text().to_string()),
 | 
					 | 
				
			||||||
                std::sync::atomic::Ordering::SeqCst,
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
            entryImp.resetWifiPopup.popdown();
 | 
					 | 
				
			||||||
        }));
 | 
					        }));
 | 
				
			||||||
    popupImp
 | 
					    popupImp.resetPopupButton.connect_clicked(
 | 
				
			||||||
        .resetPopupButton
 | 
					        clone!(@weak entry as origEntry,@weak entryImp, @weak popupImp => move |_| {
 | 
				
			||||||
        .connect_clicked(clone!(@weak entry as origEntry,@weak entryImp, @weak popupImp => move |_| {
 | 
					 | 
				
			||||||
            let entry = entryImp.resetWifiPopup.imp().resetPopupEntry.text().to_string();
 | 
					            let entry = entryImp.resetWifiPopup.imp().resetPopupEntry.text().to_string();
 | 
				
			||||||
            result_ref_button.store(
 | 
					                connect_new_network(result_ref_button.clone(), origEntry, entryImp.accessPoint.clone().take(), entry);
 | 
				
			||||||
                connect_new_network(origEntry, entryImp.accessPoint.clone().take(), entry),
 | 
					        }),
 | 
				
			||||||
                std::sync::atomic::Ordering::SeqCst,
 | 
					    );
 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
            entryImp.resetWifiPopup.popdown();
 | 
					 | 
				
			||||||
        }));
 | 
					 | 
				
			||||||
    entryImp.resetWifiPopup.popup();
 | 
					    entryImp.resetWifiPopup.popup();
 | 
				
			||||||
    println!(
 | 
					    println!(
 | 
				
			||||||
        "result is {}",
 | 
					        "result is {}",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,17 @@
 | 
				
			||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use gtk::{FlowBox, Label};
 | 
					 | 
				
			||||||
use crate::components::audio::audioBox::AudioBox;
 | 
					use crate::components::audio::audioBox::AudioBox;
 | 
				
			||||||
use crate::components::bluetooth::bluetoothBox::BluetoothBox;
 | 
					 | 
				
			||||||
use crate::components::base::settingBox::SettingBox;
 | 
					use crate::components::base::settingBox::SettingBox;
 | 
				
			||||||
use crate::components::wifi::wifiBox::{WifiBox, scanForWifi};
 | 
					use crate::components::bluetooth::bluetoothBox::BluetoothBox;
 | 
				
			||||||
 | 
					use crate::components::wifi::wifiBox::{scanForWifi, show_stored_connections, WifiBox};
 | 
				
			||||||
 | 
					use adw::prelude::ButtonExt;
 | 
				
			||||||
 | 
					use glib::clone;
 | 
				
			||||||
 | 
					use glib::subclass::types::ObjectSubclassIsExt;
 | 
				
			||||||
 | 
					use gtk::{FlowBox, Label};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_CONNECTIVITY_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_CONNECTIVITY_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let wifiBox = Arc::new(WifiBox::new());
 | 
					    let wifiBox = Arc::new(WifiBox::new());
 | 
				
			||||||
 | 
					    show_stored_connections(wifiBox.clone());
 | 
				
			||||||
    scanForWifi(wifiBox.clone());
 | 
					    scanForWifi(wifiBox.clone());
 | 
				
			||||||
    let wifiBox = SettingBox::new(&*wifiBox);
 | 
					    let wifiBox = SettingBox::new(&*wifiBox);
 | 
				
			||||||
    let bluetoothBox = SettingBox::new(&BluetoothBox::new());
 | 
					    let bluetoothBox = SettingBox::new(&BluetoothBox::new());
 | 
				
			||||||
| 
						 | 
					@ -17,74 +21,76 @@ pub const HANDLE_CONNECTIVITY_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
				
			||||||
    resetMain.set_max_children_per_line(2);
 | 
					    resetMain.set_max_children_per_line(2);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_WIFI_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_WIFI_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let wifiBox = SettingBox::new(&WifiBox::new());
 | 
					    let wifiBox = Arc::new(WifiBox::new());
 | 
				
			||||||
 | 
					    scanForWifi(wifiBox.clone());
 | 
				
			||||||
 | 
					    let wifiBox = SettingBox::new(&*wifiBox);
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&wifiBox, -1);
 | 
					    resetMain.insert(&wifiBox, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_BLUETOOTH_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_BLUETOOTH_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let bluetoothBox = SettingBox::new(&BluetoothBox::new());
 | 
					    let bluetoothBox = SettingBox::new(&BluetoothBox::new());
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&bluetoothBox, -1);
 | 
					    resetMain.insert(&bluetoothBox, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_VPN_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_VPN_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let label = Label::new(Some("not implemented yet"));
 | 
					    let label = Label::new(Some("not implemented yet"));
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&label, -1);
 | 
					    resetMain.insert(&label, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_AUDIO_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_AUDIO_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let audioBox = AudioBox::new();
 | 
					    let audioBox = AudioBox::new();
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&audioBox, -1);
 | 
					    resetMain.insert(&audioBox, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_VOLUME_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_VOLUME_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let audioBox = AudioBox::new();
 | 
					    let audioBox = AudioBox::new();
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&audioBox, -1);
 | 
					    resetMain.insert(&audioBox, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_MICROPHONE_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_MICROPHONE_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let label = Label::new(Some("not implemented yet"));
 | 
					    let label = Label::new(Some("not implemented yet"));
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&label, -1);
 | 
					    resetMain.insert(&label, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_HOME: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_HOME: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_PERIPHERALS_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_PERIPHERALS_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let label = Label::new(Some("not implemented yet"));
 | 
					    let label = Label::new(Some("not implemented yet"));
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&label, -1);
 | 
					    resetMain.insert(&label, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_MONITOR_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_MONITOR_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let label = Label::new(Some("not implemented yet"));
 | 
					    let label = Label::new(Some("not implemented yet"));
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&label, -1);
 | 
					    resetMain.insert(&label, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_MOUSE_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_MOUSE_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let label = Label::new(Some("not implemented yet"));
 | 
					    let label = Label::new(Some("not implemented yet"));
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&label, -1);
 | 
					    resetMain.insert(&label, -1);
 | 
				
			||||||
    resetMain.set_max_children_per_line(1);
 | 
					    resetMain.set_max_children_per_line(1);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const HANDLE_KEYBOARD_CLICK: fn(FlowBox) =  |resetMain: FlowBox|   {
 | 
					pub const HANDLE_KEYBOARD_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
 | 
				
			||||||
    let label = Label::new(Some("not implemented yet"));
 | 
					    let label = Label::new(Some("not implemented yet"));
 | 
				
			||||||
    resetMain.remove_all();
 | 
					    resetMain.remove_all();
 | 
				
			||||||
    resetMain.insert(&label, -1);
 | 
					    resetMain.insert(&label, -1);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,24 +5,35 @@
 | 
				
			||||||
  <template class="resetPopup" parent="GtkPopover">
 | 
					  <template class="resetPopup" parent="GtkPopover">
 | 
				
			||||||
    <child>
 | 
					    <child>
 | 
				
			||||||
      <object class="GtkBox">
 | 
					      <object class="GtkBox">
 | 
				
			||||||
 | 
					        <property name="homogeneous">True</property>
 | 
				
			||||||
 | 
					        <property name="orientation">vertical</property>
 | 
				
			||||||
        <child>
 | 
					        <child>
 | 
				
			||||||
          <object class="GtkPasswordEntry" id="resetPopupEntry">
 | 
					          <object class="GtkLabel" id="resetPopupLabel">
 | 
				
			||||||
            <property name="activates-default">True</property>
 | 
					            <property name="visible">False</property>
 | 
				
			||||||
            <property name="margin-bottom">5</property>
 | 
					 | 
				
			||||||
            <property name="margin-end">5</property>
 | 
					 | 
				
			||||||
            <property name="margin-start">5</property>
 | 
					 | 
				
			||||||
            <property name="margin-top">5</property>
 | 
					 | 
				
			||||||
            <property name="placeholder-text">Wifi Password</property>
 | 
					 | 
				
			||||||
            <property name="show-peek-icon">True</property>
 | 
					 | 
				
			||||||
          </object>
 | 
					          </object>
 | 
				
			||||||
        </child>
 | 
					        </child>
 | 
				
			||||||
        <child>
 | 
					        <child>
 | 
				
			||||||
          <object class="GtkButton" id="resetPopupButton">
 | 
					          <object class="GtkBox">
 | 
				
			||||||
            <property name="label">connect</property>
 | 
					            <child>
 | 
				
			||||||
            <property name="margin-bottom">5</property>
 | 
					              <object class="GtkPasswordEntry" id="resetPopupEntry">
 | 
				
			||||||
            <property name="margin-end">5</property>
 | 
					                <property name="activates-default">True</property>
 | 
				
			||||||
            <property name="margin-start">5</property>
 | 
					                <property name="margin-bottom">5</property>
 | 
				
			||||||
            <property name="margin-top">5</property>
 | 
					                <property name="margin-end">5</property>
 | 
				
			||||||
 | 
					                <property name="margin-start">5</property>
 | 
				
			||||||
 | 
					                <property name="margin-top">5</property>
 | 
				
			||||||
 | 
					                <property name="placeholder-text">Wifi Password</property>
 | 
				
			||||||
 | 
					                <property name="show-peek-icon">True</property>
 | 
				
			||||||
 | 
					              </object>
 | 
				
			||||||
 | 
					            </child>
 | 
				
			||||||
 | 
					            <child>
 | 
				
			||||||
 | 
					              <object class="GtkButton" id="resetPopupButton">
 | 
				
			||||||
 | 
					                <property name="label">connect</property>
 | 
				
			||||||
 | 
					                <property name="margin-bottom">5</property>
 | 
				
			||||||
 | 
					                <property name="margin-end">5</property>
 | 
				
			||||||
 | 
					                <property name="margin-start">5</property>
 | 
				
			||||||
 | 
					                <property name="margin-top">5</property>
 | 
				
			||||||
 | 
					              </object>
 | 
				
			||||||
 | 
					            </child>
 | 
				
			||||||
          </object>
 | 
					          </object>
 | 
				
			||||||
        </child>
 | 
					        </child>
 | 
				
			||||||
      </object>
 | 
					      </object>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										23
									
								
								src/resources/resetSavedWifiEntry.ui
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/resources/resetSavedWifiEntry.ui
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					<?xml version='1.0' encoding='UTF-8'?>
 | 
				
			||||||
 | 
					<!-- Created with Cambalache 0.17.0 -->
 | 
				
			||||||
 | 
					<interface>
 | 
				
			||||||
 | 
					  <requires lib="gtk" version="4.12"/>
 | 
				
			||||||
 | 
					  <template class="resetSavedWifiEntry" parent="GtkBox">
 | 
				
			||||||
 | 
					    <property name="spacing">5</property>
 | 
				
			||||||
 | 
					    <child>
 | 
				
			||||||
 | 
					      <object class="GtkButton" id="resetDeleteSavedWifiButton">
 | 
				
			||||||
 | 
					        <property name="has-frame">False</property>
 | 
				
			||||||
 | 
					        <property name="icon-name">user-trash-symbolic</property>
 | 
				
			||||||
 | 
					      </object>
 | 
				
			||||||
 | 
					    </child>
 | 
				
			||||||
 | 
					    <child>
 | 
				
			||||||
 | 
					      <object class="GtkButton" id="resetEditSavedWifiButton">
 | 
				
			||||||
 | 
					        <property name="has-frame">False</property>
 | 
				
			||||||
 | 
					        <property name="icon-name">document-edit-symbolic</property>
 | 
				
			||||||
 | 
					      </object>
 | 
				
			||||||
 | 
					    </child>
 | 
				
			||||||
 | 
					    <child>
 | 
				
			||||||
 | 
					      <object class="GtkLabel" id="resetSavedWifiLabel"/>
 | 
				
			||||||
 | 
					    </child>
 | 
				
			||||||
 | 
					  </template>
 | 
				
			||||||
 | 
					</interface>
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,8 @@
 | 
				
			||||||
	(13,1,None,"resetMicSourceEntry.ui",None,None,None,None,None,None,None),
 | 
						(13,1,None,"resetMicSourceEntry.ui",None,None,None,None,None,None,None),
 | 
				
			||||||
	(14,1,None,"resetSettingBox.ui",None,None,None,None,None,None,None),
 | 
						(14,1,None,"resetSettingBox.ui",None,None,None,None,None,None,None),
 | 
				
			||||||
	(15,1,None,"resetListBoxRow.ui",None,None,None,None,None,None,None),
 | 
						(15,1,None,"resetListBoxRow.ui",None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,6,None,"resetPopup.ui",None,None,None,None,None,None,None)
 | 
						(16,6,None,"resetPopup.ui",None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,1,None,"resetSavedWifiEntry.ui",None,None,None,None,None,None,None)
 | 
				
			||||||
  </ui>
 | 
					  </ui>
 | 
				
			||||||
  <object>
 | 
					  <object>
 | 
				
			||||||
	(3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1,"  <child>\n    <object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\">\n    </object>\n  </child>"),
 | 
						(3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1,"  <child>\n    <object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\">\n    </object>\n  </child>"),
 | 
				
			||||||
| 
						 | 
					@ -65,8 +66,6 @@
 | 
				
			||||||
	(4,108,"GtkLabel",None,107,None,None,None,-1,None),
 | 
						(4,108,"GtkLabel",None,107,None,None,None,-1,None),
 | 
				
			||||||
	(4,109,"GtkButton",None,107,None,None,None,1,None),
 | 
						(4,109,"GtkButton",None,107,None,None,None,1,None),
 | 
				
			||||||
	(4,110,"GtkBox",None,105,None,None,None,1,None),
 | 
						(4,110,"GtkBox",None,105,None,None,None,1,None),
 | 
				
			||||||
	(4,111,"GtkLabel",None,110,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,112,"GtkButton",None,110,None,None,None,1,None),
 | 
					 | 
				
			||||||
	(4,113,"resetListBoxRow","resetWifiSwitchRow",89,None,None,None,None,None),
 | 
						(4,113,"resetListBoxRow","resetWifiSwitchRow",89,None,None,None,None,None),
 | 
				
			||||||
	(4,114,"GtkBox",None,113,None,None,None,None,None),
 | 
						(4,114,"GtkBox",None,113,None,None,None,None,None),
 | 
				
			||||||
	(4,115,"GtkLabel",None,114,None,None,None,None,None),
 | 
						(4,115,"GtkLabel",None,114,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					@ -75,6 +74,10 @@
 | 
				
			||||||
	(4,121,"GtkBox",None,117,None,None,None,1,None),
 | 
						(4,121,"GtkBox",None,117,None,None,None,1,None),
 | 
				
			||||||
	(4,122,"GtkLabel",None,121,None,None,None,None,None),
 | 
						(4,122,"GtkLabel",None,121,None,None,None,None,None),
 | 
				
			||||||
	(4,123,"GtkImage",None,121,None,None,None,1,None),
 | 
						(4,123,"GtkImage",None,121,None,None,None,1,None),
 | 
				
			||||||
 | 
						(4,124,"GtkListBox","resetStoredWifiList",110,None,None,None,1,None),
 | 
				
			||||||
 | 
						(4,125,"GtkBox",None,110,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,126,"GtkLabel",None,125,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkButton",None,125,None,None,None,1,None),
 | 
				
			||||||
	(5,2,"GtkBox","resetWifiEntry",None,None,None,None,None,None),
 | 
						(5,2,"GtkBox","resetWifiEntry",None,None,None,None,None,None),
 | 
				
			||||||
	(5,3,"GtkBox",None,2,None,None,None,None,None),
 | 
						(5,3,"GtkBox",None,2,None,None,None,None,None),
 | 
				
			||||||
	(5,4,"GtkImage","resetWifiStrength",3,None,None,None,None,None),
 | 
						(5,4,"GtkImage","resetWifiStrength",3,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					@ -159,8 +162,14 @@
 | 
				
			||||||
	(15,1,"GtkListBoxRow","resetListBoxRow",None,None,None,None,None,None),
 | 
						(15,1,"GtkListBoxRow","resetListBoxRow",None,None,None,None,None,None),
 | 
				
			||||||
	(16,6,"GtkPopover","resetPopup",None,None,None,None,-1,None),
 | 
						(16,6,"GtkPopover","resetPopup",None,None,None,None,-1,None),
 | 
				
			||||||
	(16,7,"GtkBox",None,6,None,None,None,None,None),
 | 
						(16,7,"GtkBox",None,6,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkPasswordEntry","resetPopupEntry",7,None,None,None,None,None),
 | 
						(16,10,"GtkBox",None,7,None,None,None,1,None),
 | 
				
			||||||
	(16,9,"GtkButton","resetPopupButton",7,None,None,None,1,None)
 | 
						(16,11,"GtkPasswordEntry","resetPopupEntry",10,None,None,None,None,None),
 | 
				
			||||||
 | 
						(16,12,"GtkButton","resetPopupButton",10,None,None,None,1,None),
 | 
				
			||||||
 | 
						(16,13,"GtkLabel","resetPopupLabel",7,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,1,"GtkBox","resetSavedWifiEntry",None,None,None,None,-1,None),
 | 
				
			||||||
 | 
						(17,2,"GtkLabel","resetSavedWifiLabel",1,None,None,None,2,None),
 | 
				
			||||||
 | 
						(17,3,"GtkButton","resetEditSavedWifiButton",1,None,None,None,1,None),
 | 
				
			||||||
 | 
						(17,4,"GtkButton","resetDeleteSavedWifiButton",1,None,None,None,None,None)
 | 
				
			||||||
  </object>
 | 
					  </object>
 | 
				
			||||||
  <object_property>
 | 
					  <object_property>
 | 
				
			||||||
	(3,1,"GtkWindow","default-height","500",None,None,None,None,None,None,None,None,None),
 | 
						(3,1,"GtkWindow","default-height","500",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					@ -259,8 +268,6 @@
 | 
				
			||||||
	(4,102,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,102,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,102,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,102,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,102,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
						(4,102,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,103,"GtkActionable","action-name","navigation.push",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,103,"GtkActionable","action-target","'advanced'",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,103,"GtkButton","label","Advanced",None,None,None,None,None,None,None,None,None),
 | 
						(4,103,"GtkButton","label","Advanced",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,103,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
 | 
						(4,103,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,103,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,103,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					@ -274,13 +281,8 @@
 | 
				
			||||||
	(4,109,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,109,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,109,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,109,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,109,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
						(4,109,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,111,"GtkLabel","label","saved networks",None,None,None,None,None,None,None,None,None),
 | 
						(4,110,"GtkBox","homogeneous","True",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,112,"GtkActionable","action-name","navigation.pop",None,None,None,None,None,None,None,None,None),
 | 
						(4,110,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,112,"GtkButton","label","back",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,112,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,112,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,112,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,112,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
					 | 
				
			||||||
	(4,114,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
 | 
						(4,114,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,115,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
 | 
						(4,115,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,115,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,115,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					@ -296,6 +298,19 @@
 | 
				
			||||||
	(4,123,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
 | 
						(4,123,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,123,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
 | 
						(4,123,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(4,123,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
						(4,123,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,124,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,124,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,124,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,124,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,124,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,124,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,126,"GtkLabel","label","saved networks",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkActionable","action-name","navigation.pop",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkButton","label","back",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(4,127,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(5,2,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(5,2,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(5,3,"GtkWidget","width-request","35",None,None,None,None,None,None,None,None,None),
 | 
						(5,3,"GtkWidget","width-request","35",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(5,4,"GtkImage","icon-name","network-wireless-signal-excellent-symbolic",None,None,None,None,None,None,None,None,None),
 | 
						(5,4,"GtkImage","icon-name","network-wireless-signal-excellent-symbolic",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					@ -478,18 +493,26 @@
 | 
				
			||||||
	(14,1,"GtkWidget","width-request","500",None,None,None,None,None,None,None,None,None),
 | 
						(14,1,"GtkWidget","width-request","500",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(15,1,"GtkListBoxRow","selectable","False",None,None,None,None,None,None,None,None,None),
 | 
						(15,1,"GtkListBoxRow","selectable","False",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(15,1,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
 | 
						(15,1,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkPasswordEntry","activates-default","True",None,None,None,None,None,None,None,None,None),
 | 
						(16,7,"GtkBox","homogeneous","True",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkPasswordEntry","placeholder-text","Wifi Password",None,None,None,None,None,None,None,None,None),
 | 
						(16,7,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkPasswordEntry","show-peek-icon","True",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkPasswordEntry","activates-default","True",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkPasswordEntry","placeholder-text","Wifi Password",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkPasswordEntry","show-peek-icon","True",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,8,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,9,"GtkButton","label","connect",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,9,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,11,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,9,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,12,"GtkButton","label","connect",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,9,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
						(16,12,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
	(16,9,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None)
 | 
						(16,12,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(16,12,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(16,12,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(16,13,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,1,"GtkBox","spacing","5",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,3,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,3,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,4,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
 | 
				
			||||||
 | 
						(17,4,"GtkButton","icon-name","user-trash-symbolic",None,None,None,None,None,None,None,None,None)
 | 
				
			||||||
  </object_property>
 | 
					  </object_property>
 | 
				
			||||||
  <object_data>
 | 
					  <object_data>
 | 
				
			||||||
	(3,42,"GtkWidget",1,1,None,None,None,None,None,None),
 | 
						(3,42,"GtkWidget",1,1,None,None,None,None,None,None),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,8 +107,6 @@
 | 
				
			||||||
                </child>
 | 
					                </child>
 | 
				
			||||||
                <child>
 | 
					                <child>
 | 
				
			||||||
                  <object class="GtkButton" id="resetWifiAdvanced">
 | 
					                  <object class="GtkButton" id="resetWifiAdvanced">
 | 
				
			||||||
                    <property name="action-name">navigation.push</property>
 | 
					 | 
				
			||||||
                    <property name="action-target">'advanced'</property>
 | 
					 | 
				
			||||||
                    <property name="halign">start</property>
 | 
					                    <property name="halign">start</property>
 | 
				
			||||||
                    <property name="label">Advanced</property>
 | 
					                    <property name="label">Advanced</property>
 | 
				
			||||||
                    <property name="margin-start">5</property>
 | 
					                    <property name="margin-start">5</property>
 | 
				
			||||||
| 
						 | 
					@ -149,18 +147,34 @@
 | 
				
			||||||
            <property name="tag">saved</property>
 | 
					            <property name="tag">saved</property>
 | 
				
			||||||
            <child>
 | 
					            <child>
 | 
				
			||||||
              <object class="GtkBox">
 | 
					              <object class="GtkBox">
 | 
				
			||||||
 | 
					                <property name="homogeneous">True</property>
 | 
				
			||||||
 | 
					                <property name="orientation">vertical</property>
 | 
				
			||||||
                <child>
 | 
					                <child>
 | 
				
			||||||
                  <object class="GtkLabel">
 | 
					                  <object class="GtkBox">
 | 
				
			||||||
                    <property name="label">saved networks</property>
 | 
					                    <child>
 | 
				
			||||||
 | 
					                      <object class="GtkLabel">
 | 
				
			||||||
 | 
					                        <property name="label">saved networks</property>
 | 
				
			||||||
 | 
					                      </object>
 | 
				
			||||||
 | 
					                    </child>
 | 
				
			||||||
 | 
					                    <child>
 | 
				
			||||||
 | 
					                      <object class="GtkButton">
 | 
				
			||||||
 | 
					                        <property name="action-name">navigation.pop</property>
 | 
				
			||||||
 | 
					                        <property name="halign">start</property>
 | 
				
			||||||
 | 
					                        <property name="label">back</property>
 | 
				
			||||||
 | 
					                        <property name="margin-start">5</property>
 | 
				
			||||||
 | 
					                        <property name="margin-top">5</property>
 | 
				
			||||||
 | 
					                        <property name="valign">start</property>
 | 
				
			||||||
 | 
					                      </object>
 | 
				
			||||||
 | 
					                    </child>
 | 
				
			||||||
                  </object>
 | 
					                  </object>
 | 
				
			||||||
                </child>
 | 
					                </child>
 | 
				
			||||||
                <child>
 | 
					                <child>
 | 
				
			||||||
                  <object class="GtkButton">
 | 
					                  <object class="GtkListBox" id="resetStoredWifiList">
 | 
				
			||||||
                    <property name="action-name">navigation.pop</property>
 | 
					                    <property name="css-classes">boxed-list</property>
 | 
				
			||||||
                    <property name="halign">start</property>
 | 
					                    <property name="margin-bottom">10</property>
 | 
				
			||||||
                    <property name="label">back</property>
 | 
					                    <property name="margin-end">5</property>
 | 
				
			||||||
                    <property name="margin-start">5</property>
 | 
					                    <property name="margin-start">5</property>
 | 
				
			||||||
                    <property name="margin-top">5</property>
 | 
					                    <property name="show-separators">True</property>
 | 
				
			||||||
                    <property name="valign">start</property>
 | 
					                    <property name="valign">start</property>
 | 
				
			||||||
                  </object>
 | 
					                  </object>
 | 
				
			||||||
                </child>
 | 
					                </child>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@
 | 
				
			||||||
    <file compressed="true" preprocess="xml-stripblanks">resetListBoxRow.ui</file>
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetListBoxRow.ui</file>
 | 
				
			||||||
    <file compressed="true" preprocess="xml-stripblanks">resetWiFi.ui</file>
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetWiFi.ui</file>
 | 
				
			||||||
    <file compressed="true" preprocess="xml-stripblanks">resetWifiEntry.ui</file>
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetWifiEntry.ui</file>
 | 
				
			||||||
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetSavedWifiEntry.ui</file>
 | 
				
			||||||
    <file compressed="true" preprocess="xml-stripblanks">resetBluetooth.ui</file>
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetBluetooth.ui</file>
 | 
				
			||||||
    <file compressed="true" preprocess="xml-stripblanks">resetBluetoothEntry.ui</file>
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetBluetoothEntry.ui</file>
 | 
				
			||||||
    <file compressed="true" preprocess="xml-stripblanks">resetAudio.ui</file>
 | 
					    <file compressed="true" preprocess="xml-stripblanks">resetAudio.ui</file>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue