X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/7a4d6f5ffa594603ef83bc8b0e9945d12e082490..9f5b502185dc900f56b109752ea0cb352a7fcb71:/widgets/net.lua

diff --git a/widgets/net.lua b/widgets/net.lua
index f361146..d79e117 100644
--- a/widgets/net.lua
+++ b/widgets/net.lua
@@ -7,33 +7,24 @@
                                                   
 --]]
 
-local markup       = require("lain.util.markup")
 local helpers      = require("lain.helpers")
 
-local awful        = require("awful")
-local beautiful    = require("beautiful")
+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 }
+local string       = { format = string.format,
+                       gsub   = string.gsub }
 
 local setmetatable = setmetatable
 
 -- Network infos
 -- lain.widgets.net
 local net = {
-    send = "0",
-    recv = "0",
-    last_t = {},
-    last_r = {}
-}
-
-local unit = {
-    ["b"] = 1,
-    ["kb"] = 1024,
-    ["mb"] = 1024^2,
-    ["gb"] = 1024^3
+    last_t = 0,
+    last_r = 0
 }
 
 function net.get_device()
@@ -48,106 +39,66 @@ function net.get_device()
     end
 end
 
-function worker(args)
+local function worker(args)
     local args = args or {}
+    local timeout = args.timeout or 2
     local iface = args.iface or net.get_device()
-    local delta = args.refresh_timeout or 2
-    local unit = args.unit or unit["kb"]
-    local spr = args.spr or " "
-    local header = args.header or iface
-    local header_color = args.header_color or beautiful.fg_normal or "#FFFFFF"
-    local color_up = args.color_up or beautiful.fg_focus or header_color
-    local color_down = args.color_down or beautiful.fg_focus or header_color
-    local app = args.app or "sudo wifi-menu"
+    local units = args.units or 1024 --kb
+    local settings = args.settings or function() end
+
+    net.widget = wibox.widget.textbox('')
 
     helpers.set_map(iface, true)
-    helpers.set_map("carrier", 0)
 
-    local mynet = wibox.widget.textbox()
+    function update()
+        net_now = {}
 
-    local mynetupdate = function()
-        if iface == "" then
-            iface = net.get_device()
-            header = iface
-        end
+        if iface == "" then iface = net.get_device() end
 
-        local carrier = helpers.first_line('/sys/class/net/' .. iface ..
-                                           '/carrier') or ""
-        local state = helpers.first_line('/sys/class/net/' .. iface ..
-                                           '/operstate')
+        net_now.carrier = helpers.first_line('/sys/class/net/' .. iface ..
+                                           '/carrier') or "0"
+        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')
+                                           '/statistics/tx_bytes') or 0
         local now_r = helpers.first_line('/sys/class/net/' .. iface ..
-                                           '/statistics/rx_bytes')
-        local text = '<span color="' .. header_color .. '">' .. header .. '</span> '
+                                           '/statistics/rx_bytes') or 0
+
+        net_now.sent = tostring((now_t - net.last_t) / timeout / units)
+        net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".")
 
-        if carrier ~= "1"
+        net_now.received = tostring((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 net_now.carrier ~= "1"
         then
             if helpers.get_map(iface)
             then
                 n_title = iface
-                if n_title == "" then
-                    n_title = "network"
-                    header = "Net"
-                end
-                naughty.notify({ title = n_title, text = "no carrier",
-                                 timeout = 7,
-                                 position = "top_left",
-                                 icon = beautiful.lain_no_net_notify or
-                                        helpers.icons_dir .. "no_net.png",
-                                 fg = beautiful.fg_focus or "#FFFFFF" })
-
-                mynet:set_markup(markup(header_color, header) .. markup(color_up, " Off"))
+                if n_title == "" then n_title = "network" end
+                naughty.notify({
+                    title    = n_title,
+                    text     = "no carrier",
+                    timeout  = 7,
+                    position = "top_left",
+                    icon     = helpers.icons_dir .. "no_net.png",
+                    fg       = notify_fg or "#FFFFFF"
+                })
                 helpers.set_map(iface, false)
             end
-            return
         else
             helpers.set_map(iface, true)
         end
-
-        if state == 'down' or not now_t or not now_r
-        then
-            mynet:set_markup(' ' .. text .. '-' .. ' ')
-            return
-        end
-
-        if net.last_t[iface] and net.last_t[iface]
-        then
-            net.send = tostring((now_t - net.last_t[iface]) / delta / unit)
-            net.recv = tostring((now_r - net.last_r[iface]) / delta / unit)
-
-            text = text
-                   .. '<span color="' .. color_up .. '">'
-                   .. string.format('%.1f', net.send)
-                   .. '</span>'
-                   ..  spr
-                   .. '<span color="' .. color_down .. '">'
-                   .. string.format('%.1f', net.recv)
-                   .. '</span>'
-
-            mynet:set_markup(' ' .. text .. ' ')
-        else
-            mynet:set_markup(' ' .. text .. '-' .. ' ')
-        end
-
-        net.last_t[iface] = now_t
-        net.last_r[iface] = now_r
     end
 
-    local mynettimer = timer({ timeout = delta })
-    mynettimer:connect_signal("timeout", mynetupdate)
-    mynettimer:start()
-    mynettimer:emit_signal("timeout")
-
-    mynet:buttons(awful.util.table.join(
-            awful.button({}, 0, function()
-                helpers.run_in_terminal(app)
-                mynetupdate()
-            end)))
-
-    net.widget = mynet
-
-    return setmetatable(net, { __index = net.widget })
+    helpers.newtimer(iface, timeout, update)
+    return net.widget
 end
 
 return setmetatable(net, { __call = function(_, ...) return worker(...) end })