some fixes
This commit is contained in:
132
awesome/src/tools/network/device.lua
Normal file
132
awesome/src/tools/network/device.lua
Normal file
@@ -0,0 +1,132 @@
|
||||
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,
|
||||
})
|
||||
128
awesome/src/tools/network/init.lua
Normal file
128
awesome/src/tools/network/init.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
local lgi = require('lgi')
|
||||
local gobject = require('gears.object')
|
||||
|
||||
local dbus_proxy = require('src.lib.lua-dbus_proxy.src.dbus_proxy')
|
||||
|
||||
local nmdevice = require('src.tools.network.device')
|
||||
|
||||
local network = gobject {}
|
||||
|
||||
network.NMState = {
|
||||
UNKNOWN = 0,
|
||||
ASLEEP = 10,
|
||||
DISCONNECTED = 20,
|
||||
DISCONNECTING = 30,
|
||||
CONNECTING = 40,
|
||||
CONNECTED_LOCAL = 50,
|
||||
CONNECTED_SITE = 60,
|
||||
CONNECTED_GLOBAL = 70,
|
||||
}
|
||||
|
||||
network.DeviceType = {
|
||||
ETHERNET = 1,
|
||||
WIFI = 2,
|
||||
}
|
||||
|
||||
network.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 network:toggle_network()
|
||||
self._private.NetworkManager:Set('org.freedesktop.NetworkManager', 'NetworkingEnabled', lgi.GLib.Variant('b', not self.NetworkingEnabled))
|
||||
end
|
||||
|
||||
function network:get_active_device()
|
||||
for path, device in pairs(self.Devices) do
|
||||
print(device.ActiveConnection, path)
|
||||
if device.State == self.DeviceState.ACTIVATED then
|
||||
print(device, path)
|
||||
else
|
||||
print('no active device')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function network:get_devices()
|
||||
local devices = self.NetworkManager:GetDevices() or {}
|
||||
self.Devices = {}
|
||||
for _, device in ipairs(devices) do
|
||||
self.Devices[device] = nmdevice(device)
|
||||
self.Devices[device]:connect_signal('NetworkManagerDevice::StateChanged', function(_, s, r)
|
||||
print(device, s, r)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function network:toggle_wifi()
|
||||
if not self.NetworkingEnabled then
|
||||
self:toggle_network()
|
||||
end
|
||||
self._private.NetworkManager:Set('org.freedesktop.NetworkManager', 'WirelessEnabled', lgi.GLib.Variant('b', not self.NetworkingEnabled))
|
||||
end
|
||||
|
||||
local instance = nil
|
||||
if not instance then
|
||||
instance = setmetatable(network, {
|
||||
__call = function(self)
|
||||
self.NetworkManager = dbus_proxy.Proxy:new {
|
||||
bus = dbus_proxy.Bus.SYSTEM,
|
||||
name = 'org.freedesktop.NetworkManager',
|
||||
interface = 'org.freedesktop.NetworkManager',
|
||||
path = '/org/freedesktop/NetworkManager',
|
||||
}
|
||||
|
||||
self.NetworkManagerProperties = dbus_proxy.Proxy:new {
|
||||
bus = dbus_proxy.Bus.SYSTEM,
|
||||
name = 'org.freedesktop.NetworkManager',
|
||||
interface = 'org.freedesktop.DBus.Properties',
|
||||
path = '/org/freedesktop/NetworkManager',
|
||||
}
|
||||
|
||||
self.NetworkManagerSettings = dbus_proxy.Proxy:new {
|
||||
bus = dbus_proxy.Bus.SYSTEM,
|
||||
name = 'org.freedesktop.NetworkManager',
|
||||
interface = 'org.freedesktop.NetworkManager.Settings',
|
||||
path = '/org/freedesktop/NetworkManager/Settings',
|
||||
}
|
||||
|
||||
self.NetworkManager:connect_signal(function(_, device_path)
|
||||
if device_path then
|
||||
self:emit_signal('NetworkManager::DeviceAdded', device_path)
|
||||
end
|
||||
end, 'DeviceAdded')
|
||||
|
||||
self.NetworkManager:connect_signal(function(_, device_path)
|
||||
if device_path then
|
||||
self:emit_signal('NetworkManager::DeviceRemoved', device_path)
|
||||
end
|
||||
end, 'DeviceRemoved')
|
||||
|
||||
self.NetworkManagerProperties:connect_signal(function(_, _, data)
|
||||
if data.WirelessEnabled ~= nil then
|
||||
self.WirelessEnabled = data.WirelessEnabled
|
||||
self:emit_signal('NetworkManager::WirelessEnabled', data.WirelessEnabled)
|
||||
end
|
||||
if data.NetworkingEnabled ~= nil then
|
||||
self.NetworkingEnabled = data.NetworkingEnabled
|
||||
self:emit_signal('NetworkManager::NetworkingEnabled', data.NetworkingEnabled)
|
||||
end
|
||||
end, 'PropertiesChanged')
|
||||
|
||||
self:get_devices()
|
||||
self:get_active_device()
|
||||
end,
|
||||
})
|
||||
end
|
||||
return instance
|
||||
Reference in New Issue
Block a user