1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import { type BluetoothDevice } from "types/service/bluetooth"
import { Menu, ArrowToggleButton } from "../ToggleButton"
import icons from "lib/icons"
const bluetooth = await Service.import("bluetooth")
export const BluetoothToggle = () => ArrowToggleButton({
name: "bluetooth",
icon: bluetooth.bind("enabled").as(p => icons.bluetooth[p ? "enabled" : "disabled"]),
label: Utils.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`
}),
connection: [bluetooth, () => bluetooth.enabled],
deactivate: () => bluetooth.enabled = false,
activate: () => bluetooth.enabled = true,
})
const DeviceItem = (device: BluetoothDevice) => 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)),
}),
],
})
|