import { Menu, ArrowToggleButton } from "../ToggleButton.js" import icons from "../../../lib/icons.js" import { watch } from "../../../lib/experiments.js" const bluetooth = await Service.import("bluetooth") const title = watch("Disabled", bluetooth, () => { if (!bluetooth.enabled) return "Disabled" if (bluetooth.connected_devices.length === 1) return bluetooth.connected_devices[0].alias return `${bluetooth.connected_devices.length} Connected` }) export const BluetoothToggle = () => ArrowToggleButton({ name: "bluetooth", icon: bluetooth.bind("enabled").as(p => icons.bluetooth[p ? "enabled" : "disabled"]), label: title, connection: [bluetooth, () => bluetooth.enabled], deactivate: () => bluetooth.enabled = false, activate: () => bluetooth.enabled = true, }) const DeviceItem = (device) => Widget.Box({ children: [ Widget.Icon(device.icon_name + "-symbolic"), Widget.Label(device.name), Widget.Label({ label: `${device.battery_percentage}%`, visible: device.bind("battery_percentage").as(p => p > 0), }), Widget.Box({ hexpand: true }), Widget.Spinner({ active: device.bind("connecting"), visible: device.bind("connecting"), }), Widget.Switch({ active: device.connected, visible: device.bind("connecting").as(p => !p), setup: self => self.on("notify::active", () => { device.setConnection(self.active) }), }), ], }) export const BluetoothDevices = () => Menu({ name: "bluetooth", icon: icons.bluetooth.disabled, title: "Bluetooth", content: [ Widget.Box({ class_name: "bluetooth-devices", hexpand: true, vertical: true, children: bluetooth.bind("devices").as(ds => ds .filter(d => d.name) .map(DeviceItem)), }), ], })