X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/b40a0e83e0a79d587c9390de52c455fca7a8c589..912bd26ede8901c98fd8d7a35f8493ee448109ad:/widgets/bat.lua diff --git a/widgets/bat.lua b/widgets/bat.lua index 4526c85..d18af87 100644 --- a/widgets/bat.lua +++ b/widgets/bat.lua @@ -7,9 +7,7 @@ --]] -local newtimer = require("lain.helpers").newtimer -local first_line = require("lain.helpers").first_line - +local helpers = require("lain.helpers") local naughty = require("naughty") local wibox = require("wibox") @@ -21,9 +19,9 @@ local setmetatable = setmetatable -- Battery infos -- lain.widgets.bat -local bat = {} local function worker(args) + local bat = {} local args = args or {} local timeout = args.timeout or 30 local battery = args.battery or "BAT0" @@ -48,6 +46,11 @@ local function worker(args) bg = "#FFFFFF" } + helpers.set_map(battery .. "status", "N/A") + helpers.set_map(battery .. "perc", "N/A") + helpers.set_map(battery .. "time", "N/A") + helpers.set_map(battery .. "watt", "N/A") + function update() bat_now = { status = "Not present", @@ -58,22 +61,22 @@ local function worker(args) local bstr = "/sys/class/power_supply/" .. battery - local present = first_line(bstr .. "/present") + local present = helpers.first_line(bstr .. "/present") if present == "1" then - local rate = first_line(bstr .. "/power_now") or - first_line(bstr .. "/current_now") + local rate = helpers.first_line(bstr .. "/power_now") or + helpers.first_line(bstr .. "/current_now") - local ratev = first_line(bstr .. "/voltage_now") + local ratev = helpers.first_line(bstr .. "/voltage_now") - local rem = first_line(bstr .. "/energy_now") or - first_line(bstr .. "/charge_now") + local rem = helpers.first_line(bstr .. "/energy_now") or + helpers.first_line(bstr .. "/charge_now") - local tot = first_line(bstr .. "/energy_full") or - first_line(bstr .. "/charge_full") + local tot = helpers.first_line(bstr .. "/energy_full") or + helpers.first_line(bstr .. "/charge_full") - bat_now.status = first_line(bstr .. "/status") or "N/A" + bat_now.status = helpers.first_line(bstr .. "/status") or "N/A" rate = tonumber(rate) or 1 ratev = tonumber(ratev) @@ -97,13 +100,17 @@ local function worker(args) bat_now.time = string.format("%02d:%02d", hrs, min) - local perc = (rem / tot) * 100 - if perc <= 100 then - bat_now.perc = string.format("%d", perc) - elseif perc > 100 then - bat_now.perc = "100" - elseif perc < 0 then - bat_now.perc = "0" + bat_now.perc = helpers.first_line(bstr .. "/capacity") + + if not bat_now.perc then + local perc = (rem / tot) * 100 + if perc <= 100 then + bat_now.perc = string.format("%d", perc) + elseif perc > 100 then + bat_now.perc = "100" + elseif perc < 0 then + bat_now.perc = "0" + end end if rate ~= nil and ratev ~= nil then @@ -111,32 +118,43 @@ local function worker(args) else bat_now.watt = "N/A" end - end - widget = bat.widget - settings() + if bat_now.status ~= helpers.get_map(battery .. "status") + or bat_now.perc ~= helpers.get_map(battery .. "perc") + or bat_now.time ~= helpers.get_map(battery .. "time") + or bat_now.watt ~= helpers.get_map(battery .. "watt") + then + widget = bat.widget + settings() + + helpers.set_map(battery .. "status", bat_now.status) + helpers.set_map(battery .. "perc", bat_now.perc) + helpers.set_map(battery .. "time", bat_now.time) + helpers.set_map(battery .. "watt", bat_now.watt) + end -- notifications for low and critical states - if bat_now.status == "Discharging" and notify == "on" + if bat_now.status == "Discharging" and notify == "on" and bat_now.perc ~= nil then - if tonumber(bat_now.perc) <= 5 + local nperc = tonumber(bat_now.perc) or 100 + if nperc <= 5 then bat.id = naughty.notify({ preset = bat_notification_critical_preset, - replaces_id = bat.id + replaces_id = bat.id, }).id - elseif tonumber(bat_now.perc) <= 15 + elseif nperc <= 15 then bat.id = naughty.notify({ preset = bat_notification_low_preset, - replaces_id = bat.id + replaces_id = bat.id, }).id end end end - newtimer("bat", timeout, update) + helpers.newtimer(battery, timeout, update) return bat.widget end