Replace inline Bluetooth pairing script with external reusable bash script for improved maintainability and compatibility. Refactor Bluetooth panel/device logic to use adapter-based APIs.

This commit is contained in:
danny
2026-01-02 11:02:46 +01:00
parent ba45c67d93
commit e3fef31ba3
4 changed files with 96 additions and 65 deletions
+14 -14
View File
@@ -156,9 +156,9 @@ SmartPanel {
label: I18n.tr("bluetooth.panel.connected-devices")
headerMode: "layout"
property var items: {
if (!BluetoothService.adapter || !Bluetooth.devices)
if (!BluetoothService.adapter || !BluetoothService.adapter.devices)
return [];
var filtered = Bluetooth.devices.values.filter(dev => dev && !dev.blocked && dev.connected);
var filtered = BluetoothService.adapter.devices.values.filter(dev => dev && !dev.blocked && dev.connected);
filtered = BluetoothService.dedupeDevices(filtered);
return BluetoothService.sortDevices(filtered);
}
@@ -173,9 +173,9 @@ SmartPanel {
tooltipText: I18n.tr("tooltips.connect-disconnect-devices")
headerMode: "layout"
property var items: {
if (!BluetoothService.adapter || !Bluetooth.devices)
if (!BluetoothService.adapter || !BluetoothService.adapter.devices)
return [];
var filtered = Bluetooth.devices.values.filter(dev => dev && !dev.blocked && !dev.connected && (dev.paired || dev.trusted));
var filtered = BluetoothService.adapter.devices.values.filter(dev => dev && !dev.blocked && !dev.connected && (dev.paired || dev.trusted));
filtered = BluetoothService.dedupeDevices(filtered);
return BluetoothService.sortDevices(filtered);
}
@@ -189,9 +189,9 @@ SmartPanel {
label: I18n.tr("bluetooth.panel.available-devices")
headerMode: "filter"
property var items: {
if (!BluetoothService.adapter || !Bluetooth.devices)
if (!BluetoothService.adapter || !BluetoothService.adapter.devices)
return [];
var filtered = Bluetooth.devices.values.filter(dev => dev && !dev.blocked && !dev.paired && !dev.trusted);
var filtered = BluetoothService.adapter.devices.values.filter(dev => dev && !dev.blocked && !dev.paired && !dev.trusted);
// Optionally hide devices without a meaningful name when the filter is enabled
if (Settings.data && Settings.data.ui && Settings.data.ui.bluetoothHideUnnamedDevices) {
filtered = filtered.filter(function (dev) {
@@ -268,12 +268,12 @@ SmartPanel {
// Empty state when no devices
NBox {
visible: {
if (!Bluetooth.devices || BluetoothService.scanningActive)
if (!(BluetoothService.adapter && BluetoothService.adapter.devices) || BluetoothService.scanningActive)
return false;
var availableCount = Bluetooth.devices.values.filter(dev => {
return dev && !dev.blocked && (dev.signalStrength === undefined || dev.signalStrength > 0);
}).length;
var availableCount = BluetoothService.adapter.devices.values.filter(dev => {
return dev && !dev.blocked && (dev.signalStrength === undefined || dev.signalStrength > 0);
}).length;
return (availableCount === 0);
}
Layout.fillWidth: true
@@ -321,13 +321,13 @@ SmartPanel {
Layout.fillWidth: true
Layout.preferredHeight: columnScanning.implicitHeight + Style.marginM * 2
visible: {
if (!Bluetooth.devices || !BluetoothService.scanningActive) {
if (!(BluetoothService.adapter && BluetoothService.adapter.devices) || !BluetoothService.scanningActive) {
return false;
}
var availableCount = Bluetooth.devices.values.filter(dev => {
return dev && !dev.paired && !dev.pairing && !dev.blocked && (dev.signalStrength === undefined || dev.signalStrength > 0);
}).length;
var availableCount = BluetoothService.adapter.devices.values.filter(dev => {
return dev && !dev.paired && !dev.pairing && !dev.blocked && (dev.signalStrength === undefined || dev.signalStrength > 0);
}).length;
return (availableCount === 0);
}