diff options
-rw-r--r-- | battery-widget/battery.lua | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/battery-widget/battery.lua b/battery-widget/battery.lua index 452d7ef..4b02a7c 100644 --- a/battery-widget/battery.lua +++ b/battery-widget/battery.lua @@ -125,20 +125,25 @@ local function worker(user_args) local battery_info = {} local capacities = {} for s in stdout:gmatch("[^\r\n]+") do + -- Match a line with status and charge level local status, charge_str, _ = string.match(s, '.+: ([%a%s]+), (%d?%d?%d)%%,?(.*)') if status ~= nil then + -- Enforce that for each entry in battery_info there is an + -- entry in capacities of zero. If a battery has status + -- "Unknown" then there is no capacity reported and we treat it + -- as zero capactiy for later calculations. table.insert(battery_info, {status = status, charge = tonumber(charge_str)}) - else - local cap_str = string.match(s, '.+:.+last full capacity (%d+)') - table.insert(capacities, tonumber(cap_str)) + table.insert(capacities, 0) end - end - local capacity = 0 - for _, cap in ipairs(capacities) do - capacity = capacity + cap + -- Match a line where capacity is reported + local cap_str = string.match(s, '.+:.+last full capacity (%d+)') + if cap_str ~= nil then + capacities[#capacities] = tonumber(cap_str) or 0 + end end + local capacity = 0 local charge = 0 local status for i, batt in ipairs(battery_info) do @@ -148,7 +153,11 @@ local function worker(user_args) -- this is arbitrary, and maybe another metric should be used end + -- Adds up total (capacity-weighted) charge and total capacity. + -- It effectively ignores batteries with status "Unknown" as we + -- treat them with capacity zero. charge = charge + batt.charge * capacities[i] + capacity = capacity + capacities[i] end end charge = charge / capacity |