X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/eb8cec907a50f3fd6df4b14ae10b910444017f92..7fd4fdbc0fe237a967c542b24fe91cdfd326e3c5:/widgets/net.lua?ds=inline

diff --git a/widgets/net.lua b/widgets/net.lua
index f05235b..a578ae4 100644
--- a/widgets/net.lua
+++ b/widgets/net.lua
@@ -13,10 +13,9 @@ local notify_fg    = require("beautiful").fg_focus
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
-local io           = io
-local tostring     = tostring
 local string       = { format = string.format,
-                       gsub   = string.gsub }
+                       gsub   = string.gsub,
+                       match  = string.match }
 
 local setmetatable = setmetatable
 
@@ -28,64 +27,70 @@ local net = {
 }
 
 function net.get_device()
-    f = io.popen("ip link show | cut -d' ' -f2,9")
-    ws = f:read("*all")
-    f:close()
-    ws = ws:match("%w+: UP")
+    local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9")
+    ws = ws:match("%w+: UP") or ws:match("ppp%w+: UNKNOWN")
     if ws ~= nil then
-        return ws:gsub(": UP", "")
+        return ws:match("(%w+):")
     else
-        return ""
+        return "network off"
     end
 end
 
-function worker(args)
+local function worker(args)
     local args = args or {}
-    local iface = args.iface or net.get_device()
-    local units = args.units or 1024 --kb
     local timeout = args.timeout or 2
+    local units = args.units or 1024 --kb
+    local notify = args.notify or "on"
+    local screen = args.screen or 1
     local settings = args.settings or function() end
 
-    widget = wibox.widget.textbox('')
+    iface = args.iface or net.get_device()
+
+    net.widget = wibox.widget.textbox('')
 
     helpers.set_map(iface, true)
 
-    function update() 
-        if iface == "" then iface = net.get_device() end
+    function update()
+        net_now = {}
 
-        carrier = helpers.first_line('/sys/class/net/' .. iface ..
+        if iface == "" or string.match(iface, "network off")
+        then
+            iface = net.get_device()
+        end
+
+        net_now.carrier = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/carrier') or "0"
-        state = helpers.first_line('/sys/class/net/' .. iface ..
+        net_now.state = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/operstate') or "down"
         local now_t = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/statistics/tx_bytes') or 0
         local now_r = helpers.first_line('/sys/class/net/' .. iface ..
                                            '/statistics/rx_bytes') or 0
 
-        sent = tostring((now_t - net.last_t) / timeout / units)
-        sent = string.gsub(string.format('%.1f', sent), ",", ".")
+        net_now.sent = (now_t - net.last_t) / timeout / units
+        net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".")
 
-        received = tostring((now_r - net.last_r) / timeout / units)
-        received = string.gsub(string.format('%.1f', received), ",", ".")
+        net_now.received = (now_r - net.last_r) / timeout / units
+        net_now.received = string.gsub(string.format('%.1f', net_now.received), ",", ".")
 
+        widget = net.widget
         settings()
 
         net.last_t = now_t
         net.last_r = now_r
 
-        if carrier ~= "1"
+        if net_now.carrier ~= "1" and notify == "on"
         then
             if helpers.get_map(iface)
             then
-                n_title = iface
-                if n_title == "" then n_title = "network" end
                 naughty.notify({
-                    title    = n_title,
+                    title    = iface,
                     text     = "no carrier",
                     timeout  = 7,
                     position = "top_left",
                     icon     = helpers.icons_dir .. "no_net.png",
-                    fg       = notify_fg or "#FFFFFF"
+                    fg       = notify_fg or "#FFFFFF",
+                    screen   = screen
                 })
                 helpers.set_map(iface, false)
             end
@@ -95,8 +100,7 @@ function worker(args)
     end
 
     helpers.newtimer(iface, timeout, update)
-
-    return widget
+    return net.widget
 end
 
 return setmetatable(net, { __call = function(_, ...) return worker(...) end })