X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/a2379fd5555c3a392142b21b4d8ff28d91c37831..8d37b9a1e4521a220f20ce2e1414f656aa3a5015:/widgets/net.lua diff --git a/widgets/net.lua b/widgets/net.lua index 18727f1..f05235b 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 = {} -} - -net.units = { - ["b"] = 1, - ["kb"] = 1024, - ["mb"] = 1024^2, - ["gb"] = 1024^3 + last_t = 0, + last_r = 0 } function net.get_device() @@ -51,103 +42,61 @@ end function worker(args) local args = args or {} local iface = args.iface or net.get_device() - local delta = args.refresh_timeout or 2 - local units = args.units or net.units["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 "#FFFFFF" - local color_down = args.color_down or beautiful.fg_focus or "#FFFFFF" - local app = args.app or "sudo wifi-menu" + local units = args.units or 1024 --kb + local timeout = args.timeout or 2 + local settings = args.settings or function() end - helpers.set_map(iface, true) - helpers.set_map("carrier", 0) + widget = wibox.widget.textbox('') - local mynet = wibox.widget.textbox() + helpers.set_map(iface, true) - local mynetupdate = function() - if iface == "" then - iface = net.get_device() - header = iface - end + function update() + 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') + carrier = helpers.first_line('/sys/class/net/' .. iface .. + '/carrier') or "0" + 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 = '' .. header .. ' ' + '/statistics/rx_bytes') or 0 + + sent = tostring((now_t - net.last_t) / timeout / units) + sent = string.gsub(string.format('%.1f', sent), ",", ".") + + received = tostring((now_r - net.last_r) / timeout / units) + received = string.gsub(string.format('%.1f', received), ",", ".") + + settings() + + net.last_t = now_t + net.last_r = now_r if 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 / units) - net.recv = tostring((now_r - net.last_r[iface]) / delta / units) - - text = text - .. '' - .. string.format('%.1f', net.send) - .. '' - .. spr - .. '' - .. string.format('%.1f', net.recv) - .. '' - - 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 + helpers.newtimer(iface, timeout, update) - return setmetatable(net, { __index = net.widget }) + return widget end return setmetatable(net, { __call = function(_, ...) return worker(...) end })