From 5e2d2977cfd0bb78e52a2a292245e211750effaf Mon Sep 17 00:00:00 2001 From: cool-cool-sweat <35659567+cool-cool-sweat@users.noreply.github.com> Date: Mon, 22 Jan 2018 22:39:48 -0500 Subject: [PATCH 1/2] net.lua: support wifi/ethernet connection indicators --- widget/net.lua | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/widget/net.lua b/widget/net.lua index a72fc3d..1780d78 100644 --- a/widget/net.lua +++ b/widget/net.lua @@ -15,22 +15,23 @@ local string = { format = string.format, match = string.match } -- 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 From cec3f2913bc81c4028b8725b1c7ecad88df5f425 Mon Sep 17 00:00:00 2001 From: cool-cool-sweat <35659567+cool-cool-sweat@users.noreply.github.com> Date: Mon, 22 Jan 2018 22:47:10 -0500 Subject: [PATCH 2/2] bat.lua: add notification for full charge --- widget/bat.lua | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/widget/bat.lua b/widget/bat.lua index 8e04569..e39c921 100644 --- a/widget/bat.lua +++ b/widget/bat.lua @@ -47,6 +47,14 @@ local function factory(args) bg = "#CDCDCD" } + bat_notification_charged_preset = { + title = "Battery full", + text = "You can unplug the cable", + timeout = 15, + fg = "#202020", + bg = "#CDCDCD" + } + bat_now = { status = "N/A", ac_status = "N/A", @@ -156,16 +164,23 @@ local function factory(args) widget = bat.widget settings() - -- notifications for critical and low levels - if notify == "on" and bat_now.status == "Discharging" then - if tonumber(bat_now.perc) <= n_perc[1] then + -- notifications for critical, low, and full levels + if notify == "on" then + if bat_now.status == "Discharging" then + if tonumber(bat_now.perc) <= n_perc[1] then + bat.id = naughty.notify({ + preset = bat_notification_critical_preset, + replaces_id = bat.id + }).id + elseif tonumber(bat_now.perc) <= n_perc[2] then + bat.id = naughty.notify({ + preset = bat_notification_low_preset, + replaces_id = bat.id + }).id + end + elseif bat_now.status == "Full" then bat.id = naughty.notify({ - preset = bat_notification_critical_preset, - replaces_id = bat.id - }).id - elseif tonumber(bat_now.perc) <= n_perc[2] then - bat.id = naughty.notify({ - preset = bat_notification_low_preset, + preset = bat_notification_charged_preset, replaces_id = bat.id }).id end