70 lines
No EOL
2.6 KiB
QML
70 lines
No EOL
2.6 KiB
QML
import QtQuick
|
|
import Quickshell.Io
|
|
|
|
QtObject {
|
|
// List all known devices
|
|
function listDevices(callback) {
|
|
var proc = Qt.createQmlObject('
|
|
import Quickshell.Io;\n\
|
|
Process {\n\
|
|
command: ["bluetoothctl", "devices"],\n\
|
|
running: true;\n\
|
|
stdout: StdioCollector {\n\
|
|
onStreamFinished: {\n\
|
|
var lines = this.text.split("\n");\n\
|
|
var devs = [];\n\
|
|
for (var i = 0; i < lines.length; ++i) {\n\
|
|
var line = lines[i].trim();\n\
|
|
if (line.startsWith("Device ")) {\n\
|
|
var parts = line.split(" ");\n\
|
|
var mac = parts[1];\n\
|
|
var name = parts.slice(2).join(" ");\n\
|
|
devs.push({ mac: mac, name: name });\n\
|
|
}\n\
|
|
}\n\
|
|
callback(devs);\n\
|
|
parent.destroy();\n\
|
|
}\n\
|
|
}\n\
|
|
}', this);
|
|
}
|
|
|
|
// Check if a device is connected
|
|
function checkConnected(mac, callback) {
|
|
var proc = Qt.createQmlObject('
|
|
import Quickshell.Io;\n\
|
|
Process {\n\
|
|
command: ["bluetoothctl", "info", "' + mac + '"],\n\
|
|
running: true;\n\
|
|
stdout: StdioCollector {\n\
|
|
onStreamFinished: {\n\
|
|
var connected = this.text.indexOf("Connected: yes") !== -1;\n\
|
|
callback(connected);\n\
|
|
parent.destroy();\n\
|
|
}\n\
|
|
}\n\
|
|
}', this);
|
|
}
|
|
|
|
// Connect to a device
|
|
function connect(mac, callback) {
|
|
var proc = Qt.createQmlObject('
|
|
import Quickshell.Io;\n\
|
|
Process {\n\
|
|
command: ["bluetoothctl", "connect", "' + mac + '"],\n\
|
|
running: true;\n\
|
|
stdout: StdioCollector { onStreamFinished: { callback(true); parent.destroy(); } }\n\
|
|
}', this);
|
|
}
|
|
|
|
// Disconnect from a device
|
|
function disconnect(mac, callback) {
|
|
var proc = Qt.createQmlObject('
|
|
import Quickshell.Io;\n\
|
|
Process {\n\
|
|
command: ["bluetoothctl", "disconnect", "' + mac + '"],\n\
|
|
running: true;\n\
|
|
stdout: StdioCollector { onStreamFinished: { callback(true); parent.destroy(); } }\n\
|
|
}', this);
|
|
}
|
|
} |