From 169450aa2e9d9058686aab0f7cf54b728ecd6efa Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Tue, 29 Apr 2025 18:47:45 +1000 Subject: feat: bar bluetooth devices --- services/Bluetooth.qml | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 services/Bluetooth.qml (limited to 'services/Bluetooth.qml') diff --git a/services/Bluetooth.qml b/services/Bluetooth.qml new file mode 100644 index 0000000..d749879 --- /dev/null +++ b/services/Bluetooth.qml @@ -0,0 +1,70 @@ +pragma Singleton + +import Quickshell +import Quickshell.Io +import QtQuick + +Singleton { + id: root + + property bool powered + property bool discovering + readonly property list devices: [] + readonly property list connected: devices.filter(d => d.connected) + + Process { + running: true + command: ["bluetoothctl"] + stdout: SplitParser { + onRead: getInfo.running = true + } + } + + Process { + id: getInfo + running: true + command: ["sh", "-c", "bluetoothctl show | paste -s"] + stdout: SplitParser { + onRead: data => { + root.powered = data.includes("Powered: yes"); + root.discovering = data.includes("Discovering: yes"); + } + } + } + + Process { + id: getDevices + running: true + command: ["fish", "-c", `for a in (bluetoothctl devices | cut -d ' ' -f 2); bluetoothctl info $a | jq -R 'reduce (inputs / ":") as [$key, $value] ({}; .[$key | ltrimstr("\t")] = ($value | ltrimstr(" ")))' | jq -c --arg addr $a '.Address = $addr'; end`] + stdout: SplitParser { + onRead: data => { + const d = JSON.parse(data); + root.devices.push(deviceComp.createObject(root, { + name: d.Name, + alias: d.Alias, + address: d.Address, + icon: d.Icon, + connected: d.Connected === "yes", + paired: d.Paired === "yes", + trusted: d.Trusted === "yes" + })); + } + } + } + + component Device: QtObject { + property string name + property string alias + property string address + property string icon + property bool connected + property bool paired + property bool trusted + } + + Component { + id: deviceComp + + Device {} + } +} -- cgit v1.2.3-freya