X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/1b12fd2319e1cd02706fd3a7ec0f0203ca2782d2..1a40fe80f801a27e047ce29f57215eca8f84bf6f:/widget/net.lua?ds=inline diff --git a/widget/net.lua b/widget/net.lua index a72fc3d..805b577 100644 --- a/widget/net.lua +++ b/widget/net.lua @@ -1,7 +1,7 @@ --[[ Licensed under GNU General Public License v2 - * (c) 2013, Luke Bonham + * (c) 2013, Luca CPZ * (c) 2010-2012, Peter Hofmann --]] @@ -9,28 +9,29 @@ local helpers = require("lain.helpers") local naughty = require("naughty") local wibox = require("wibox") -local string = { format = string.format, match = string.match } +local string = string -- Network infos -- lain.widget.net local function factory(args) - local net = { widget = wibox.widget.textbox(), devices = {} } - local args = args or {} - 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 + local net = { widget = wibox.widget.textbox(), devices = {} } + local args = args or {} + local timeout = args.timeout or 2 + local units = args.units or 1024 -- KB + local notify = args.notify or "on" + local wifi_state = args.wifi_state or "off" + local eth_state = args.eth_state or "off" + local screen = args.screen or 1 + local settings = args.settings or function() end -- Compatibility with old API where iface was a string corresponding to 1 interface net.iface = (args.iface and (type(args.iface) == "string" and {args.iface}) or (type(args.iface) == "table" and args.iface)) or {} function net.get_device() - helpers.async(string.format("ip link show", device_cmd), function(ws) - ws = ws:match("(%w+): ") - net.iface = ws and { ws } or {} + helpers.line_callback("ip link", function(line) + net.iface[#net.iface + 1] = not string.match(line, "LOOPBACK") and string.match(line, "(%w+): <") or nil end) end @@ -45,7 +46,7 @@ local function factory(args) received = 0 } - for i, dev in ipairs(net.iface) do + for _, dev in ipairs(net.iface) do local dev_now = {} local dev_before = net.devices[dev] or { last_t = 0, last_r = 0 } local now_t = tonumber(helpers.first_line(string.format("/sys/class/net/%s/statistics/tx_bytes", dev)) or 0) @@ -66,9 +67,18 @@ local function factory(args) dev_now.last_t = now_t dev_now.last_r = now_r + if wifi_state == "on" and helpers.first_line(string.format("/sys/class/net/%s/uevent", dev)) == "DEVTYPE=wlan" and string.match(dev_now.carrier, "1") then + dev_now.wifi = true + dev_now.signal = tonumber(string.match(helpers.lines_from("/proc/net/wireless")[3], "(%-%d+%.)")) or nil + end + + if eth_state == "on" and helpers.first_line(string.format("/sys/class/net/%s/uevent", dev)) ~= "DEVTYPE=wlan" and string.match(dev_now.carrier, "1") then + dev_now.ethernet = true + end + net.devices[dev] = dev_now - -- Notify only once when connection is loss + -- Notify only once when connection is lost if string.match(dev_now.carrier, "0") and notify == "on" and helpers.get_map(dev) then naughty.notify { title = dev, @@ -84,7 +94,7 @@ local function factory(args) net_now.carrier = dev_now.carrier net_now.state = dev_now.state net_now.devices[dev] = dev_now - -- new_now.sent and net_now.received will be + -- net_now.sent and net_now.received will be -- the totals across all specified devices end