elenapan/config/awesome/evil/kdeconnect.lua
2024-07-18 17:39:59 +03:00

51 lines
1.6 KiB
Lua

-- Provides:
-- evil::kdeconnect
-- reachable (boolean)
-- battery (integer from 0 to 100)
local awful = require("awful")
local update_interval = 20
local kdeconnect_devices_script = [[
sh -c "
for device in \$(qdbus --literal org.kde.kdeconnect /modules/kdeconnect org.kde.kdeconnect.daemon.devices); do
# Print the second field split by double quotes using awk
echo \"\$device\" | awk -F'\"' '{print \$2}'
# TODO: Remove break when/if I decide to support multiple devices
break
done
"
]]
-- First get device ID
awful.spawn.easy_async_with_shell(kdeconnect_devices_script, function(stdout, _, __, exit_code)
device_id = string.gsub(stdout, '^%s*(.-)%s*$', '%1')
-- Use device ID to create the script
local kdeconnect_script = [[
sh -c '
deviceid="]]..device_id..[["
reachable=$(qdbus org.kde.kdeconnect "/modules/kdeconnect/devices/$deviceid" org.kde.kdeconnect.device.isReachable)
if [ "$reachable" = "true" ]; then
battery=$(qdbus org.kde.kdeconnect /modules/kdeconnect/devices/${deviceid}/battery org.kde.kdeconnect.device.battery.charge | tr -d 'n')
echo $battery
else
echo -1
fi
'
]]
-- Periodically get device info
awful.widget.watch(kdeconnect_script, update_interval, function(widget, stdout)
local value = tonumber(stdout)
local battery, reachable
if value < 0 then
battery = nil
reachable = false
else
battery = value
reachable = true
end
awesome.emit_signal("evil::kdeconnect", reachable, battery)
end)
end)