From d02da7d3f7fb5169a5c8a94e294b192cce6b1b2a Mon Sep 17 00:00:00 2001 From: dashie Date: Thu, 4 Apr 2024 18:10:12 +0200 Subject: [PATCH] wip: fix bluetooth and wifi --- src/components/bluetooth/bluetooth_box.rs | 61 ++++++------------- .../bluetooth/bluetooth_box_impl.rs | 3 + src/components/window/handle_sidebar_click.rs | 8 +-- src/resources/resetAudioInput.ui | 2 +- src/resources/resetAudioOutput.ui | 2 +- src/resources/resetBluetooth.ui | 11 +++- src/resources/resetBluetoothEntry.ui | 2 +- src/resources/resetCardEntry.ui | 2 +- src/resources/resetError.ui | 2 +- src/resources/resetInputStreamEntry.ui | 2 +- src/resources/resetListBoxRow.ui | 2 +- src/resources/resetMainWindow.ui | 2 +- src/resources/resetOutputStreamEntry.ui | 2 +- src/resources/resetPopup.ui | 2 +- src/resources/resetSavedWifiEntry.ui | 2 +- src/resources/resetSettingBox.ui | 2 +- src/resources/resetShortcuts.ui | 2 +- src/resources/resetSidebarEntry.ui | 2 +- src/resources/resetSinkEntry.ui | 2 +- src/resources/resetSourceEntry.ui | 2 +- src/resources/resetUI.cmb | 6 ++ src/resources/resetWiFi.ui | 2 +- src/resources/resetWifiAddressEntry.ui | 2 +- src/resources/resetWifiEntry.ui | 2 +- src/resources/resetWifiOptions.ui | 2 +- src/resources/resetWifiRouteEntry.ui | 2 +- 26 files changed, 64 insertions(+), 67 deletions(-) diff --git a/src/components/bluetooth/bluetooth_box.rs b/src/components/bluetooth/bluetooth_box.rs index c405bc7..131a55d 100644 --- a/src/components/bluetooth/bluetooth_box.rs +++ b/src/components/bluetooth/bluetooth_box.rs @@ -175,14 +175,13 @@ fn bluetooth_enabled_switch_handler( glib::Propagation::Proceed } -pub fn populate_connected_bluetooth_devices(bluetooth_box: Arc) { +pub fn populate_connected_bluetooth_devices(listeners: Arc,bluetooth_box: Arc) { // TODO handle saved devices -> they also exist gio::spawn_blocking(move || { let ref_box = bluetooth_box.clone(); - let devices = get_bluetooth_devices(ref_box.clone()); - dbg!(&devices); - let connected_devices = get_connected_devices(ref_box.clone()); let adapters = get_bluetooth_adapters(ref_box.clone()); + let devices = get_bluetooth_devices(ref_box.clone()); + dbg!(&adapters); { let imp = bluetooth_box.imp(); let list = imp.reset_model_list.write().unwrap(); @@ -199,6 +198,7 @@ pub fn populate_connected_bluetooth_devices(bluetooth_box: Arc) { *model_index += 1; } } + start_bluetooth_listener(listeners, ref_box.clone()); glib::spawn_future(async move { glib::idle_add_once(move || { let new_adapter_ref = ref_box.clone(); @@ -230,30 +230,27 @@ pub fn populate_connected_bluetooth_devices(bluetooth_box: Arc) { }); for device in devices { - dbg!(&device); let path = device.path.clone(); let connected = device.connected; + let rssi = device.rssi.clone(); let bluetooth_entry = BluetoothEntry::new(device, ref_box.clone()); - imp.available_devices - .borrow_mut() - .insert(path, bluetooth_entry.clone()); if connected { imp.reset_bluetooth_connected_devices.add(&*bluetooth_entry); + imp.connected_devices + .borrow_mut() + .insert(path, bluetooth_entry.clone()); } else { - imp.reset_bluetooth_available_devices.add(&*bluetooth_entry); - } - } - for device in connected_devices { - let path = device.path.clone(); - let connected = device.connected; - let bluetooth_entry = BluetoothEntry::new(device, ref_box.clone()); - imp.connected_devices - .borrow_mut() - .insert(path, bluetooth_entry.clone()); - if connected { - imp.reset_bluetooth_connected_devices.add(&*bluetooth_entry); - } else { - imp.reset_bluetooth_available_devices.add(&*bluetooth_entry); + if rssi == -1 { + imp.reset_bluetooth_saved_devices.add(&*bluetooth_entry); + imp.saved_devices + .borrow_mut() + .insert(path, bluetooth_entry.clone()); + } else { + imp.reset_bluetooth_available_devices.add(&*bluetooth_entry); + imp.available_devices + .borrow_mut() + .insert(path, bluetooth_entry.clone()); + } } } }); @@ -426,31 +423,13 @@ fn bluetooth_listener_loop( } } -fn get_connected_devices(bluetooth_box: Arc) -> Vec { - let conn = Connection::new_session().unwrap(); - let proxy = conn.with_proxy(BASE, DBUS_PATH, Duration::from_millis(1000)); - let res: Result<(Vec,), Error> = - proxy.method_call(BLUETOOTH, "GetConnectedBluetoothDevices", ()); - if res.is_err() { - show_error::( - bluetooth_box.clone(), - "Failed to get connected bluetooth devices", - ); - return Vec::new(); - } - res.unwrap().0 -} - fn get_bluetooth_devices(bluetooth_box: Arc) -> Vec { let conn = Connection::new_session().unwrap(); let proxy = conn.with_proxy(BASE, DBUS_PATH, Duration::from_millis(1000)); let res: Result<(Vec,), Error> = proxy.method_call(BLUETOOTH, "GetBluetoothDevices", ()); if res.is_err() { - show_error::( - bluetooth_box.clone(), - "Failed to get bluetooth devices", - ); + show_error::(bluetooth_box.clone(), "Failed to get bluetooth devices"); return Vec::new(); } res.unwrap().0 diff --git a/src/components/bluetooth/bluetooth_box_impl.rs b/src/components/bluetooth/bluetooth_box_impl.rs index f94196b..4206e2e 100644 --- a/src/components/bluetooth/bluetooth_box_impl.rs +++ b/src/components/bluetooth/bluetooth_box_impl.rs @@ -24,6 +24,8 @@ pub struct BluetoothBox { #[template_child] pub reset_bluetooth_available_devices: TemplateChild, #[template_child] + pub reset_bluetooth_saved_devices: TemplateChild, + #[template_child] pub reset_bluetooth_refresh_button: TemplateChild