summaryrefslogtreecommitdiff
path: root/battery-widget
diff options
context:
space:
mode:
Diffstat (limited to 'battery-widget')
-rw-r--r--battery-widget/battery.lua30
1 files changed, 27 insertions, 3 deletions
diff --git a/battery-widget/battery.lua b/battery-widget/battery.lua
index 01a3ddd..4cbc314 100644
--- a/battery-widget/battery.lua
+++ b/battery-widget/battery.lua
@@ -67,14 +67,36 @@ local function show_battery_warning()
}
end
+local last_battery_check = os.time()
+
watch("acpi", 10,
function(widget, stdout, stderr, exitreason, exitcode)
local batteryType
- local _, status, charge_str, time = string.match(stdout, '(.+): (%a+), (%d?%d?%d)%%,? ?.*')
- local charge = tonumber(charge_str)
+
+ local battery_info = {}
+ for s in stdout:gmatch("[^\r\n]+") do
+ local _, status, charge_str, time = string.match(s, '(.+): (%a+), (%d?%d?%d)%%,? ?.*')
+ table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
+ end
+
+ local charge = 0
+ local status
+ for i, batt in ipairs(battery_info) do
+ if batt.charge >= charge then
+ status = batt.status -- use most charged battery status
+ -- this is arbitrary, and maybe another metric should be used
+ end
+
+ charge = charge + batt.charge
+ end
+ charge = charge // #battery_info -- use average charge for battery icon
+
if (charge >= 0 and charge < 15) then
batteryType = "battery-empty%s-symbolic"
- if status ~= 'Charging' then
+ if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then
+ -- if 5 minutes have elapsed since the last warning
+ last_battery_check = time()
+
show_battery_warning()
end
elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic"
@@ -82,11 +104,13 @@ watch("acpi", 10,
elseif (charge >= 60 and charge < 80) then batteryType = "battery-good%s-symbolic"
elseif (charge >= 80 and charge <= 100) then batteryType = "battery-full%s-symbolic"
end
+
if status == 'Charging' then
batteryType = string.format(batteryType, '-charging')
else
batteryType = string.format(batteryType, '')
end
+
widget.icon:set_image(PATH_TO_ICONS .. batteryType .. ".svg")
-- Update popup text