X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/68037080cd50887746db0529e20c4bd1f8c404d4..6f7dae29dc64fb5adc5677d24eaba90ea54510f9:/widgets/contrib/tpbat/init.lua

diff --git a/widgets/contrib/tpbat/init.lua b/widgets/contrib/tpbat/init.lua
index 1bb6a9b..0a22526 100644
--- a/widgets/contrib/tpbat/init.lua
+++ b/widgets/contrib/tpbat/init.lua
@@ -1,36 +1,41 @@
---[[
-     tpbat.lua
-     Battery status widget for ThinkPad laptops that use SMAPI
-     lain.widgets.contrib.tpbat
-
-     More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi
 
-     Licensed under GNU General Public License v2 
-      * (c) 2013,      Conor Heine
-      * (c) 2013,      Luke Bonham                
-      * (c) 2010-2012, Peter Hofmann              
-                                                  
+--[[
+                                                               
+     tpbat.lua                                                 
+     Battery status widget for ThinkPad laptops that use SMAPI 
+     lain.widgets.contrib.tpbat                                
+                                                               
+     More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi  
+                                                               
+     Licensed under GNU General Public License v2              
+      * (c) 2013,      Conor Heine                             
+      * (c) 2013,      Luke Bonham                             
+      * (c) 2010-2012, Peter Hofmann                           
+                                                               
 --]]
 
+local debug        = { getinfo = debug.getinfo }
 local newtimer     = require("lain.helpers").newtimer
 local first_line   = require("lain.helpers").first_line
 local beautiful    = require("beautiful")
 local naughty      = require("naughty")
 local wibox        = require("wibox")
-local smapi        = require("lain.widgets.contrib.tpbat.smapi") -- Ugly :(
 
 local string       = { format = string.format }
 local math         = { floor = math.floor }
 local tostring     = tostring
 local setmetatable = setmetatable
 
+package.path       = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] .. "?.lua;" .. package.path
+local smapi        = require("smapi")
+
 -- ThinkPad SMAPI-enabled battery info widget
+-- lain.widgets.contrib.tpbat
 local tpbat = { }
-
 local tpbat_notification = nil
 
 function tpbat:hide()
-    if tpbat_notification ~= nil 
+    if tpbat_notification ~= nil
     then
         naughty.destroy(tpbat_notification)
         tpbat_notification = nil
@@ -39,8 +44,10 @@ end
 
 function tpbat:show(t_out)
     tpbat:hide()
-    
-    local bat = self.bat
+
+    local bat   = self.bat
+    local t_out = t_out or 0
+
     if bat == nil or not bat:installed() then return end
 
     local mfgr   = bat:get('manufacturer') or "no_mfgr"
@@ -50,9 +57,9 @@ function tpbat:show(t_out)
     local time   = bat:remaining_time()
     local msg    = "\t"
 
-    if status ~= "idle" and status ~= "nil" 
+    if status ~= "idle" and status ~= "nil"
     then
-        if time == "N/A" 
+        if time == "N/A"
         then
             msg = "...Calculating time remaining..."
         else
@@ -63,12 +70,13 @@ function tpbat:show(t_out)
     end
 
     local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem)
-    str = str .. string.format("\n%s \t\t\t %s", status:upper(), msg)
+                .. string.format("\n%s \t\t\t %s", status:upper(), msg)
 
     tpbat_notification = naughty.notify({
         preset = { fg = beautiful.fg_normal },
         text = str,
-        timeout = t_out
+        timeout = t_out,
+        screen = client.focus and client.focus.screen or 1
     })
 end
 
@@ -80,19 +88,32 @@ function tpbat.register(args)
 
     tpbat.bat = smapi:battery(battery) -- Create a new battery
     local bat = tpbat.bat
-    
+
     tpbat.widget = wibox.widget.textbox('')
 
-    if bat:get('state') == nil 
+    bat_notification_low_preset = {
+        title = "Battery low",
+        text = "Plug the cable!",
+        timeout = 15,
+        fg = "#202020",
+        bg = "#CDCDCD"
+    }
+
+    bat_notification_critical_preset = {
+        title = "Battery exhausted",
+        text = "Shutdown imminent",
+        timeout = 15,
+        fg = "#000000",
+        bg = "#FFFFFF"
+    }
+
+    if bat:get('state') == nil
     then
         local n = naughty.notify({
+            preset = bat_notification_low_preset,
             title = "SMAPI Battery Warning: Unable to read battery state!",
             text = "This widget is intended for ThinkPads. Is tp_smapi installed? Check your configs & paths.",
-            position = "top_right",
-            timeout = 15,
-            fg="#202020",
-            bg="#cdcdcd",
-            ontop = true
+            screen = client.focus and client.focus.screen or 1
         })
     end
 
@@ -106,48 +127,41 @@ function tpbat.register(args)
 
         if bat:installed()
         then
-            bat_now.status = bat:status()
+            bat_now.status = bat:status() or "N/A"
             bat_now.perc   = bat:percent()
             bat_now.time   = bat:remaining_time()
             -- bat_now.watt = string.format("%.2fW", (VOLTS * AMPS) / 1e12)
 
-            -- notifications for low and critical states
-            if bat_now.perc <= 5
-            then
-                tpbat.id = naughty.notify({
-                    text = "shutdown imminent",
-                    title = "battery nearly exhausted",
-                    position = "top_right",
-                    timeout = 15,
-                    fg="#000000",
-                    bg="#ffffff",
-                    ontop = true,
-                    replaces_id = tpbat.id
-                }).id
-            elseif bat_now.perc <= 15
+            -- notifications for low and critical states (when discharging)
+            if bat_now.status == "discharging"
             then
-                tpbat.id = naughty.notify({
-                    text = "plug the cable",
-                    title = "battery low",
-                    position = "top_right",
-                    timeout = 15,
-                    fg="#202020",
-                    bg="#cdcdcd",
-                    ontop = true,
-                    replaces_id = tpbat.id
-                }).id
+                if bat_now.perc <= 5
+                then
+                    tpbat.id = naughty.notify({
+                        preset = bat_notification_critical_preset,
+                        replaces_id = tpbat.id,
+                        screen = client.focus and client.focus.screen or 1
+                    }).id
+                elseif bat_now.perc <= 15
+                then
+                    tpbat.id = naughty.notify({
+                        preset = bat_notification_low_preset,
+                        replaces_id = tpbat.id,
+                        screen = client.focus and client.focus.screen or 1
+                    }).id
+                end
             end
 
             bat_now.perc = tostring(bat_now.perc)
         end
 
-        widget = tpbat.widget -- 'widget' needed in rc.lua (following convention)
+        widget = tpbat.widget
         settings()
     end
 
-    newtimer("tpbat", timeout, update)
+    newtimer("tpbat-" .. bat.name, timeout, update)
 
-    widget:connect_signal('mouse::enter', function () tpbat:show(0) end)
+    widget:connect_signal('mouse::enter', function () tpbat:show() end)
     widget:connect_signal('mouse::leave', function () tpbat:hide() end)
 
     return tpbat.widget