import { bind, interval, readFile, timeout, writeFile } from "astal"; import { Gtk } from "astal/gtk4"; import AstalBluetooth from "gi://AstalBluetooth"; import BTDevice from "./Device"; const ALIGN = Gtk.Align; const MAX_RETRY = 20; const bt = AstalBluetooth.get_default(); // const LaunchBluetoothModule = () => { // const box = new Gtk.Box(); // // const placeholder = () => { // return // } // // if (bt.adapter) { // box.append(BluetoothModule()); // } else { // const p = placeholder(); // box.append(p); // // let count = 0; // const i = interval(1000, () => { // if (bt.adapter !== null) { // box.remove(p); // box.append(BluetoothModule()); // i.cancel(); // } else if (count >= MAX_RETRY) { // i.cancel(); // } // count++; // }); // } // // return box; // } const BluetoothModule = () => { return ( ); }; const openBTPicker = () => { picker.popup(); try { bt.adapter.start_discovery(); } catch (_) { } }; const BluetoothPickerList = () => { let btEnableState = false; try { btEnableState = readFile("./btconf") === "true" ? true : false; } catch (_) { } if (bt.get_adapter()) { print('Setting BT state to ' + btEnableState); bt.adapter.set_powered(btEnableState); } else { timeout(5000, () => { if (bt.get_adapter()) { print('Setting BT state to ' + btEnableState); bt.adapter.set_powered(btEnableState); } else { timeout(5000, () => { try { bt.adapter.set_powered(btEnableState); } catch (_) { } }) } }) } const updateState = () => { btEnableState = !btEnableState; writeFile("./btconf", "" + btEnableState); }; return ( { try { bt.adapter.stop_discovery() } catch (_) { } }} cssClasses={["popover-box"]} > } endWidget={ updateState()} > } > {bind(bt, "devices").as(devices => { return devices .filter(device => { if (device.get_connected() || device.get_paired()) { return device; } }) .map(device => { return ; }); })} {bind(bt, "devices").as(devices => { return devices .filter(data => { if (!data.get_connected() && !data.get_paired()) { return data; } }) .map(device => { return ; }); })} ); }; const BluetoothPicker = () => { const popover = new Gtk.Popover(); popover.set_child(BluetoothPickerList()); popover.connect("closed", () => bt.adapter.stop_discovery()); return popover; }; const picker = BluetoothPicker(); export default { BluetoothModule, };