diff --git a/awesome/src/tools/network/device.lua b/awesome/src/tools/network/device.lua index d21f045..ad375cf 100644 --- a/awesome/src/tools/network/device.lua +++ b/awesome/src/tools/network/device.lua @@ -152,6 +152,10 @@ return setmetatable(device, { if self.NetworkManagerDeviceWireless then return self.NetworkManagerDeviceWireless.Bitrate end + elseif key == 'Speed' then + if self.NetworkManagerDeviceWired then + return self.NetworkManagerDeviceWired.Speed + end elseif key == 'Managed' then return self.NetworkManagerDevice.Managed elseif key == 'ActiveConnection' then diff --git a/awesome/src/tools/network/init.lua b/awesome/src/tools/network/init.lua index 0c881aa..9068422 100644 --- a/awesome/src/tools/network/init.lua +++ b/awesome/src/tools/network/init.lua @@ -93,13 +93,19 @@ end --TODO: Make sure this works, I don't know how its going --TODO: to work if there were multiple wireless devices, probably try --TODO: to find the one that is active or something like that +---Returns the current wifi device, if none if found returns the ethernet devie, else nil +---@return wifi|ethernet|nil device function network:get_wireless_device() + local ethernet_device = nil for _, device in pairs(self.Devices) do print(device.DeviceType, device.device_path) if device.DeviceType == self.DeviceType.WIFI then return device + elseif device.DeviceType == self.DeviceType.ETHERNET then + ethernet_device = device end end + return ethernet_device end function network:get_devices() diff --git a/awesome/src/widgets/network.lua b/awesome/src/widgets/network.lua index a0f1262..cf324e7 100644 --- a/awesome/src/widgets/network.lua +++ b/awesome/src/widgets/network.lua @@ -16,7 +16,8 @@ local wibox = require('wibox') -- Local Libs local hover = require('src.tools.hover') -local nm_widget = require('src.modules.network_controller') +local nm_widget = require('src.modules.network') +local networkManager = require('src.tools.network')() local capi = { awesome = awesome, @@ -62,33 +63,61 @@ return setmetatable({}, { hover.bg_hover { widget = w } - capi.awesome.connect_signal('NM::AccessPointStrength', function(strength) - strength = mfloor(strength) - w:get_children_by_id('wifi_strength')[1].text = strength .. '%' - w:get_children_by_id('wifi_icon')[1].image = gcolor.recolor_image(icondir .. - 'wifi-strength-' .. mfloor(strength / 25) + 1 .. '.svg', beautiful.colorscheme.bg) - end) - - capi.awesome.connect_signal('NM::EthernetStatus', function(connected, speed) - local tt = atooltip { + -- Little workaround because signals from nm_widget are not working? + --! Find out why the signals are not working + local function update_ethernet(device) + w.tt = atooltip { objects = { w }, mode = 'outside', preferred_alignments = 'middle', margins = dpi(10), + text = 'Connected via Ethernet at ' .. mfloor(device.Speed or 0) .. '/Mbps', } - if connected then - w:get_children_by_id('wifi_icon')[1].image = gcolor.recolor_image(icondir .. 'ethernet.svg', - beautiful.colorscheme.bg) - tt.text = 'Connected via Ethernet at ' .. mfloor(speed or 0) .. '/Mbps' - else - w:get_children_by_id('wifi_icon')[1].image = gcolor.recolor_image(icondir .. 'no-internet.svg', - beautiful.colorscheme.bg) - tt.text = 'No connection found' - end - end) + end local nm = nm_widget { screen = screen } + local function active_access_point_strength(strength) + local s + if strength > 80 then + s = 5 + elseif strength >= 60 and strength < 80 then + s = 4 + elseif strength >= 40 and strength < 60 then + s = 3 + elseif strength >= 20 and strength < 40 then + s = 2 + else + s = 1 + end + w:get_children_by_id('wifi_strength')[1].text = math.floor(strength) .. '%' + w:get_children_by_id('wifi_icon')[1].image = gcolor.recolor_image(icondir .. + 'wifi-strength-' .. s .. '.svg', beautiful.colorscheme.bg) + end + + capi.awesome.connect_signal('ActiveAccessPointStrength', active_access_point_strength) + + -- Remove the wifi signals when no wifi is active/readd them when wifi is active + networkManager:connect_signal('NetworkManager::WirelessEnabled', function(enabled) + if enabled then + capi.awesome.connect_signal('ActiveAccessPointStrength', active_access_point_strength) + w:get_children_by_id('wifi_strength')[1].visible = true + w.tt = nil + else + -- If its nil then there is no internet + local dev = networkManager:get_wireless_device() + if not dev then + w:get_children_by_id('wifi_icon')[1].image = gcolor.recolor_image(icondir .. 'no-internet.svg', beautiful.colorscheme.bg) + else + w:get_children_by_id('wifi_icon')[1].image = gcolor.recolor_image(icondir .. 'ethernet.svg', beautiful.colorscheme.bg) + update_ethernet(dev) + w.tt = nil + end + capi.awesome.disconnect_signal('ActiveAccessPointStrength', active_access_point_strength) + w:get_children_by_id('wifi_strength')[1].visible = false + end + end) + local network_controler_popup = apopup { widget = nm, visible = true,