X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/5ebdab637085b1fbf20e47aba6c04f04191bf0ce..a0fa709f342889efa4bae8d8ddefff2141d2cd8f:/widgets/bat.lua?ds=inline

diff --git a/widgets/bat.lua b/widgets/bat.lua
index 789c694..48a14fb 100644
--- a/widgets/bat.lua
+++ b/widgets/bat.lua
@@ -15,6 +15,7 @@ local wibox        = require("wibox")
 
 local math         = { floor  = math.floor }
 local string       = { format = string.format }
+local tonumber     = tonumber
 
 local setmetatable = setmetatable
 
@@ -26,6 +27,7 @@ local function worker(args)
     local args = args or {}
     local timeout = args.timeout or 30
     local battery = args.battery or "BAT0"
+    local notify = args.notify or "on"
     local settings = args.settings or function() end
 
     bat.widget = wibox.widget.textbox('')
@@ -57,6 +59,11 @@ local function worker(args)
 
             bat_now.status = first_line(bstr .. "/status") or "N/A"
 
+            rate  = tonumber(rate)
+            ratev = tonumber(ratev)
+            rem   = tonumber(rem)
+            tot   = tonumber(tot)
+
             local time_rat = 0
             if bat_now.status == "Charging"
             then
@@ -67,16 +74,32 @@ local function worker(args)
             end
 
             local hrs = math.floor(time_rat)
-            local min = (time_rat - hrs) * 60
+            if hrs < 0 then hrs = 0 elseif hrs > 23 then hrs = 23 end
+
+            local min = math.floor((time_rat - hrs) * 60)
+            if min < 0 then min = 0 elseif min > 59 then min = 59 end
 
             bat_now.time = string.format("%02d:%02d", hrs, min)
-            bat_now.perc = (rem / tot) * 100
-            bat_now.watt = string.format("%.2fW", (rate * ratev) / 1e12)
+
+            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
+
+            if rate ~= nil and ratev ~= nil then
+                bat_now.watt = string.format("%.2fW", (rate * ratev) / 1e12)
+            else
+                bat_now.watt = "N/A"
+            end
 
             -- notifications for low and critical states
-            if bat_new.status == "Discharging"
+            if bat_now.status == "Discharging" and notify == "on"
             then
-                if bat_now.perc <= 5
+                if tonumber(bat_now.perc) <= 5
                 then
                     bat.id = naughty.notify({
                         text = "shutdown imminent",
@@ -88,7 +111,7 @@ local function worker(args)
                         ontop = true,
                         replaces_id = bat.id
                     }).id
-                elseif bat_now.perc <= 15
+                elseif tonumber(bat_now.perc) <= 15
                 then
                     bat.id = naughty.notify({
                         text = "plug the cable",
@@ -102,8 +125,6 @@ local function worker(args)
                     }).id
                 end
             end
-
-            bat_now.perc = string.format("%d", bat_now.perc)
         end
 
         widget = bat.widget