Files
crylia-theme/awesome/src/tools/network/device.lua
Rene Kievits 3bae4f4403 some fixes
2023-04-28 02:29:47 +02:00

133 lines
4.2 KiB
Lua

local lgi = require('lgi')
local NM = lgi.NM
local dbus_proxy = require('src.lib.lua-dbus_proxy.src.dbus_proxy')
local gtable = require('gears.table')
local gobject = require('gears.object')
local device = gobject {}
local WIRELESS = gobject {}
device.DeviceType = {
ETHERNET = 1,
WIFI = 2,
}
device.DeviceState = {
UNKNOWN = 0,
UNMANAGED = 10,
UNAVAILABLE = 20,
DISCONNECTED = 30,
PREPARE = 40,
CONFIG = 50,
NEED_AUTH = 60,
IP_CONFIG = 70,
IP_CHECK = 80,
SECONDARIES = 90,
ACTIVATED = 100,
DEACTIVATING = 110,
FAILED = 120,
}
function WIRELESS:GetAllAccessPoints()
return self.NetworkManagerDeviceWireless:GetAllAccessPoints()
end
function WIRELESS:RequestScan()
--TODO: Are options needed? What do they do?
self.NetworkManagerDeviceWireless:RequestScan {}
end
return setmetatable(device, {
__call = function(self, device_path)
self.NetworkManagerDevice = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Device',
path = device_path,
}
self.NetworkManagerDevice:connect_signal(function(_, new_state, reason)
self:emit_signal('NetworkManagerDevice::StateChanged', new_state, reason)
end, 'StateChanged')
if self.NetworkManagerDevice.DeviceType == self.DeviceType.WIFI then
gtable.crush(self, WIRELESS)
self.NetworkManagerDeviceWireless = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Device.Wireless',
path = device_path,
}
self.NetworkManagerDeviceWirelessProperties = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.DBus.Properties',
path = device_path,
}
self.NetworkManagerDeviceWirelessProperties:connect_signal(function(_, _, data)
if data.Birate then
self:emit_signal('NetworkManagerDeviceWireless::Bitrate', data.Bitrate)
end
if data.ActiveAccessPoint then
self.emit_signal('NetworkManagerDeviceWireless::ActiveAccessPoint', data.ActiveAccessPoint)
end
end, 'PropertiesChanged')
self.NetworkManagerDeviceWireless:connect_signal(function(_, path)
self:emit_signal('NetworkManagerDeviceWireless::AccessPointAdded', path)
end, 'AccessPointAdded')
self.NetworkManagerDeviceWireless:connect_signal(function(_, path)
self:emit_signal('NetworkManagerDeviceWireless::AccessPointRemoved', path)
end, 'AccessPointRemoved')
elseif self.NetworkManagerDevice.DeviceType == self.DeviceType.ETHERNET then
self.NetworkManagerDeviceWired = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Device.Wired',
path = device_path,
}
self:emit_signal('NetworkManagerDeviceWired::Speed', self._private.NetworkManagerDeviceWired.Speed)
self.NetworkManagerDeviceWiredProperties = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.DBus.Properties',
path = device_path,
}
self.NetworkManagerDeviceWiredProperties:connect_signal(function(_, _, data)
if data.Carrier then
self:emit_signal('NetworkManagerDeviceWired::Carrier', data.Carrier)
end
end, 'PropertiesChanged')
end
return self
end,
__index = function(self, key)
if key == 'DeviceType' then
return self.NetworkManagerDevice.DeviceType
elseif key == 'State' then
return self.NetworkManagerDevice.State
elseif key == 'StateReason' then
return self.NetworkManagerDevice.StateReason
elseif key == 'Bitrate' then
if self.NetworkManagerDeviceWireless then
return self.NetworkManagerDeviceWireless.Bitrate
end
elseif key == 'Managed' then
return self.NetworkManagerDevice.Managed
elseif key == 'ActiveConnection' then
return self.NetworkManagerDevice.ActiveConnection
end
end,
})