diff --git a/src/modules/bluetooth.cpp b/src/modules/bluetooth.cpp index 06475a2e..85486cc0 100644 --- a/src/modules/bluetooth.cpp +++ b/src/modules/bluetooth.cpp @@ -1,6 +1,7 @@ #include "modules/bluetooth.hpp" #include +#include #include #include @@ -392,6 +393,30 @@ auto waybar::modules::Bluetooth::getDeviceBatteryPercentage(GDBusObject* object) return battery_percentage; } + GDBusProxy* proxy_device = G_DBUS_PROXY(g_dbus_object_get_interface(object, "org.bluez.Device1")); + if (proxy_device != nullptr) { + auto serial = getStringProperty(proxy_device, "Address"); + std::transform(serial.begin(), serial.end(), serial.begin(), + [](unsigned char c) { return std::tolower(c); }); + + auto* client = up_client_new(); + if (client == nullptr) return std::nullopt; + + auto* devices = up_client_get_devices2(client); + UpDevice* dev; + char* udev_serial; + double percentage; + for (int i = 0; i < devices->len; i++) { + dev = (UpDevice*)g_ptr_array_index(devices, i); + g_object_get(dev, "serial", &udev_serial, nullptr); + if (serial == udev_serial) { + g_object_get(dev, "percentage", &percentage, nullptr); + g_ptr_array_unref(devices); + g_object_unref(client); + return percentage; + } + } + } return std::nullopt; }