56 lines
1.6 KiB
QML
56 lines
1.6 KiB
QML
import QtQuick
|
|
import Quickshell.Io
|
|
|
|
Item {
|
|
id: root
|
|
signal devicesFound(var devices)
|
|
property var connectedDevices: []
|
|
|
|
function deviceListChanged(newList) {
|
|
if (newList.length !== root.connectedDevices.length) {
|
|
return true;
|
|
}
|
|
for (let i = 0; i < newList.length; i++) {
|
|
if (newList[i].mac !== root.connectedDevices[i].mac ||
|
|
newList[i].name !== root.connectedDevices[i].name) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
Process {
|
|
id: bluetoothConnectedDevicesProcess
|
|
command: ["bluetoothctl", "devices", "Connected"]
|
|
stdout: StdioCollector {
|
|
onStreamFinished: {
|
|
if (!this.text) {
|
|
root.connectedDevices = [];
|
|
root.devicesFound([]);
|
|
return;
|
|
}
|
|
var devices = this.text.trim().split("\n").map(line => {
|
|
var parts = line.split(" ");
|
|
return {
|
|
mac: parts[1],
|
|
name: parts.slice(2).join(" ")
|
|
};
|
|
});
|
|
|
|
if (root.deviceListChanged(devices)) {
|
|
root.connectedDevices = devices;
|
|
root.devicesFound(devices);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
interval: 2000
|
|
running: true
|
|
repeat: true
|
|
onTriggered: bluetoothConnectedDevicesProcess.running = true
|
|
}
|
|
|
|
Component.onCompleted: bluetoothConnectedDevicesProcess.running = true
|
|
} |