clean up
This commit is contained in:
@@ -3,22 +3,152 @@
|
||||
------------------------------------
|
||||
|
||||
-- Awesome Libs
|
||||
local awful = require("awful")
|
||||
local abutton = require("awful.button")
|
||||
local awidget = require("awful.widget")
|
||||
local dpi = require("beautiful").xresources.apply_dpi
|
||||
local gtable = require("gears").table
|
||||
local gfilesystem = require("gears").filesystem
|
||||
local gobject = require("gears").object
|
||||
local gcolor = require("gears").color
|
||||
local lgi = require("lgi")
|
||||
local wibox = require("wibox")
|
||||
local base = require("wibox.widget.base")
|
||||
local NM = require("lgi").NM
|
||||
local NM = lgi.NM
|
||||
|
||||
-- Third party libs
|
||||
local dbus_proxy = require("src.lib.lua-dbus_proxy.src.dbus_proxy")
|
||||
|
||||
-- Own libs
|
||||
local ap_form = require("src.modules.network_controller.ap_form")
|
||||
local cm = require("src.modules.context_menu.init")
|
||||
|
||||
local icondir = gfilesystem.get_configuration_dir() .. "src/assets/icons/network/"
|
||||
|
||||
local access_point = { mt = {} }
|
||||
|
||||
local function flags_to_security(flags, wpa_flags, rsn_flags)
|
||||
local str = ""
|
||||
if flags == 1 and wpa_flags == 0 and rsn_flags == 0 then
|
||||
str = str .. " WEP"
|
||||
end
|
||||
if wpa_flags ~= 0 then
|
||||
str = str .. " WPA1"
|
||||
end
|
||||
if not rsn_flags ~= 0 then
|
||||
str = str .. " WPA2"
|
||||
end
|
||||
if wpa_flags == 512 or rsn_flags == 512 then
|
||||
str = str .. " 802.1X"
|
||||
end
|
||||
|
||||
return (str:gsub("^%s", ""))
|
||||
end
|
||||
|
||||
function access_point:get_access_point_connections(ssid)
|
||||
local cn = {}
|
||||
|
||||
local connections = self.NetworkManagerSettings:ListConnections()
|
||||
for _, connection_path in ipairs(connections) do
|
||||
local NetworkManagerSettingsConnection = dbus_proxy.Proxy:new {
|
||||
bus = dbus_proxy.Bus.SYSTEM,
|
||||
name = "org.freedesktop.NetworkManager",
|
||||
interface = "org.freedesktop.NetworkManager.Settings.Connection",
|
||||
path = connection_path
|
||||
}
|
||||
|
||||
if NetworkManagerSettingsConnection.Filename:find(ssid) then
|
||||
table.insert(cn, NetworkManagerSettingsConnection)
|
||||
end
|
||||
end
|
||||
|
||||
return cn
|
||||
end
|
||||
|
||||
function access_point:create_profile(ap, password, auto_connect)
|
||||
local s_wsec = {}
|
||||
local security = flags_to_security(ap.Flags, ap.WpaFlags, ap.RsnFlags)
|
||||
if security ~= "" then
|
||||
if security:match("WPA") then
|
||||
s_wsec["key-mgmt"] = lgi.GLib.Variant("s", "wpa-psk")
|
||||
s_wsec["auth-alg"] = lgi.GLib.Variant("s", "open")
|
||||
s_wsec["psk"] = lgi.GLib.Variant("s", password)
|
||||
else
|
||||
s_wsec["key-mgmt"] = lgi.GLib.Variant("s", "None")
|
||||
s_wsec["wep-key-type"] = lgi.GLib.Variant("s", NM.WepKeyType.PASSPHRASE)
|
||||
s_wsec["wep-key0"] = lgi.GLib.Variant("s", password)
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
["connection"] = {
|
||||
-- ["interface-name"] = lgi.GLib.Variant("s", ap.device_interface),
|
||||
["uuid"] = lgi.GLib.Variant("s", string.gsub('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', '[xy]', function(c)
|
||||
local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
|
||||
return string.format('%x', v)
|
||||
end)),
|
||||
["id"] = lgi.GLib.Variant("s", NM.utils_ssid_to_utf8(ap.Ssid)),
|
||||
["type"] = lgi.GLib.Variant("s", "802-11-wireless"),
|
||||
["autoconnect"] = lgi.GLib.Variant("b", auto_connect),
|
||||
},
|
||||
["ipv4"] = {
|
||||
["method"] = lgi.GLib.Variant("s", "auto")
|
||||
},
|
||||
["ipv6"] = {
|
||||
["method"] = lgi.GLib.Variant("s", "auto"),
|
||||
},
|
||||
["802-11-wireless"] = {
|
||||
["mode"] = lgi.GLib.Variant("s", "infrastructure"),
|
||||
},
|
||||
["802-11-wireless-security"] = s_wsec
|
||||
}
|
||||
end
|
||||
|
||||
function access_point:disconnect_ap()
|
||||
self.NetworkManager:DeactivateConnection(self.NetworkManagerDevice.ActiveConnection)
|
||||
end
|
||||
|
||||
function access_point:connect(ap, password, auto_connect)
|
||||
local connections = self:get_access_point_connections(NM.utils_ssid_to_utf8(ap.Ssid))
|
||||
local profile = self:create_profile(self.NetworkManagerAccessPoint, password, auto_connect)
|
||||
|
||||
if #connections == 0 then
|
||||
self.NetworkManager:AddAndActivateConnectionAsync(function(proxy, context, success, fail)
|
||||
if fail ~= nil then
|
||||
print("Error: " .. tostring(fail), tostring(fail.code))
|
||||
self:emit_signal("NetworkManager::failed", tostring(fail), tostring(fail.code))
|
||||
return
|
||||
end
|
||||
|
||||
self:emit_signal("NetworkManager::connected", success)
|
||||
end, { call_id = "my-id" }, profile, self.NetworkManagerDevice.object_path,
|
||||
self.NetworkManagerAccessPoint.object_path)
|
||||
--88ALYLNxo9Kk*RwRxMfN
|
||||
else
|
||||
connections[1]:Update(profile)
|
||||
self.NetworkManager:ActivateConnectionAsync(function(proxy, context, success, failure)
|
||||
if failure then
|
||||
self:emit_signal("NM::AccessPointFailed", tostring(failure))
|
||||
return
|
||||
end
|
||||
|
||||
self:emit_signal("NM::AccessPointConnected", NM.utils_ssid_to_utf8(ap.Ssid))
|
||||
end,
|
||||
{ call_id = "my-id" }, connections[1].object_path, self.NetworkManagerDevice.object_path,
|
||||
self.NetworkManagerAccessPoint.object_path)
|
||||
end
|
||||
end
|
||||
|
||||
function access_point:toggle_access_point(ap, password, auto_connect)
|
||||
if self:is_ap_active(ap) then
|
||||
self:disconnect_ap()
|
||||
else
|
||||
self:connect_ap(ap, password, auto_connect)
|
||||
end
|
||||
end
|
||||
|
||||
function access_point:is_ap_active(ap)
|
||||
return ap.path == self.NetworkManagerDeviceWireless.ActiveAccessPoint
|
||||
end
|
||||
|
||||
function access_point.new(args)
|
||||
args = args or {}
|
||||
|
||||
@@ -32,6 +162,13 @@ function access_point.new(args)
|
||||
Theme_config.network_manager.access_point.icon_color2
|
||||
end ]]
|
||||
|
||||
local ssid_text = awidget.inputbox {
|
||||
text = NM.utils_ssid_to_utf8(args.NetworkManagerAccessPoint.Ssid) or
|
||||
args.NetworkManagerAccessPoint.hw_address or "Unknown",
|
||||
halign = "left",
|
||||
valign = "center",
|
||||
}
|
||||
|
||||
local ret = base.make_widget_from_value(wibox.widget {
|
||||
{
|
||||
{
|
||||
@@ -57,21 +194,11 @@ function access_point.new(args)
|
||||
},
|
||||
{
|
||||
{
|
||||
{
|
||||
text = NM.utils_ssid_to_utf8(args.NetworkManagerAccessPoint.Ssid) or
|
||||
args.NetworkManagerAccessPoint.hw_address or "Unknown",
|
||||
id = "alias",
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
text = "Connecting...",
|
||||
id = "connecting",
|
||||
visible = false,
|
||||
font = User_config.font.specify .. ", regular 10",
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
id = "alias_container",
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
ssid_text,
|
||||
widget = wibox.container.constraint,
|
||||
strategy = "exact",
|
||||
width = dpi(300),
|
||||
id = "alias"
|
||||
},
|
||||
width = dpi(260),
|
||||
height = dpi(40),
|
||||
@@ -130,21 +257,92 @@ function access_point.new(args)
|
||||
gtable.crush(ret, access_point, true)
|
||||
|
||||
ret.NetworkManagerAccessPoint = args.NetworkManagerAccessPoint
|
||||
ret.NetworkManagerSettings = args.NetworkManagerSettings
|
||||
ret.NetworkManagerDeviceWireless = args.NetworkManagerDeviceWireless
|
||||
ret.NetworkManagerDevice = args.NetworkManagerDevice
|
||||
ret.NetworkManager = args.NetworkManager
|
||||
|
||||
ret.ap_form = ap_form { screen = args.screen, ssid = NM.utils_ssid_to_utf8(ret.NetworkManagerAccessPoint.Ssid) }
|
||||
ret.ap_form = ap_form {
|
||||
screen = args.screen,
|
||||
NetworkManagerAccessPoint = args.NetworkManagerAccessPoint,
|
||||
ap = ret
|
||||
}
|
||||
|
||||
ret:buttons(
|
||||
gtable.join(
|
||||
awful.button(
|
||||
{},
|
||||
1,
|
||||
nil,
|
||||
function()
|
||||
ret.ap_form:popup_toggle()
|
||||
ret.cm = cm {
|
||||
widget_template = wibox.widget {
|
||||
{
|
||||
{
|
||||
{
|
||||
{
|
||||
widget = wibox.widget.imagebox,
|
||||
resize = true,
|
||||
valign = "center",
|
||||
halign = "center",
|
||||
id = "icon_role",
|
||||
},
|
||||
widget = wibox.container.constraint,
|
||||
stragety = "exact",
|
||||
width = dpi(24),
|
||||
height = dpi(24),
|
||||
id = "const"
|
||||
},
|
||||
{
|
||||
widget = wibox.widget.textbox,
|
||||
valign = "center",
|
||||
halign = "left",
|
||||
id = "text_role"
|
||||
},
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
},
|
||||
widget = wibox.container.margin
|
||||
},
|
||||
widget = wibox.container.background,
|
||||
}, spacing = dpi(10),
|
||||
entries = {
|
||||
{ -- Connect/Disconnect a device
|
||||
name = "ret.device.Connected" and "Disconnect" or "Connect",
|
||||
icon = gcolor.recolor_image("ret.device.Connected" and icondir .. "link-off.svg" or
|
||||
icondir .. "link.svg",
|
||||
Theme_config.network_manager.access_point.icon_color),
|
||||
callback = function()
|
||||
ret:toggle_access_point()
|
||||
end,
|
||||
id = "connected"
|
||||
},
|
||||
{ -- Rename a device
|
||||
name = "Rename",
|
||||
icon = gcolor.recolor_image(icondir .. "edit.svg", Theme_config.network_manager.icon_color),
|
||||
callback = function()
|
||||
ssid_text:focus()
|
||||
ssid_text:connect_signal("submit", function(text)
|
||||
text = text:get_text()
|
||||
ssid_text.markup = ret:rename(text)
|
||||
end)
|
||||
end
|
||||
)
|
||||
},
|
||||
{ -- Remove a device
|
||||
name = "Remove",
|
||||
icon = gcolor.recolor_image(icondir .. "delete.svg", Theme_config.network_manager.icon_color),
|
||||
callback = function()
|
||||
|
||||
end
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret:buttons(gtable.join(
|
||||
abutton({}, 1, nil,
|
||||
function()
|
||||
--TODO:Check if there are any connection details, else open the popup
|
||||
ret.ap_form:popup_toggle()
|
||||
end
|
||||
),
|
||||
abutton({}, 3, nil,
|
||||
function()
|
||||
ret.cm:toggle()
|
||||
end
|
||||
)
|
||||
)
|
||||
))
|
||||
|
||||
ret:get_children_by_id("con")[1].image = gcolor.recolor_image(
|
||||
icondir .. "link.svg", icon_color)
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
local awful = require("awful")
|
||||
local abutton = require("awful.button")
|
||||
local aplacement = require("awful.placement")
|
||||
local apopup = require("awful.popup")
|
||||
local awidget = require("awful.widget")
|
||||
local dpi = require("beautiful").xresources.apply_dpi
|
||||
local gtable = require("gears.table")
|
||||
local gobject = require("gears.object")
|
||||
local gcolor = require("gears.color")
|
||||
local gshape = require("gears.shape")
|
||||
local gfilesystem = require("gears.filesystem")
|
||||
local NM = require("lgi").NM
|
||||
local wibox = require("wibox")
|
||||
|
||||
local icondir = gfilesystem.get_configuration_dir() .. "src/assets/icons/network/"
|
||||
|
||||
local capi = {
|
||||
awesome = awesome,
|
||||
mouse = mouse,
|
||||
mousegrabber = mousegrabber
|
||||
}
|
||||
|
||||
@@ -22,47 +26,11 @@ end
|
||||
|
||||
function ap_form.new(args)
|
||||
args = args or {}
|
||||
args.screen = args.screen or awful.screen.preferred()
|
||||
args.screen = args.screen
|
||||
|
||||
local settigns_form = {
|
||||
password = awful.widget.inputbox {
|
||||
widget_template = wibox.template {
|
||||
widget = wibox.widget {
|
||||
{
|
||||
{
|
||||
{
|
||||
widget = wibox.widget.textbox,
|
||||
halign = "left",
|
||||
valign = "center",
|
||||
id = "text_role",
|
||||
},
|
||||
widget = wibox.container.margin,
|
||||
margins = 5,
|
||||
id = "marg"
|
||||
},
|
||||
widget = wibox.container.constraint,
|
||||
strategy = "exact",
|
||||
width = 400,
|
||||
height = 50,
|
||||
id = "const"
|
||||
},
|
||||
widget = wibox.container.background,
|
||||
bg = "#212121",
|
||||
fg = "#F0F0F0",
|
||||
border_color = "#414141",
|
||||
border_width = 2,
|
||||
shape = gshape.rounded_rect,
|
||||
forced_width = 300,
|
||||
forced_height = 50,
|
||||
},
|
||||
update_callback = function(template_widget, args)
|
||||
template_widget.widget.const.marg.text_role.markup = args.text
|
||||
end
|
||||
}
|
||||
},
|
||||
}
|
||||
local password = awidget.inputbox { hint_text = "Password..." }
|
||||
|
||||
local ret = awful.popup {
|
||||
local ret = apopup {
|
||||
widget = {
|
||||
{
|
||||
{ -- Header
|
||||
@@ -71,7 +39,7 @@ function ap_form.new(args)
|
||||
{
|
||||
{
|
||||
widget = wibox.widget.textbox,
|
||||
text = args.ssid,
|
||||
text = NM.utils_ssid_to_utf8(args.NetworkManagerAccessPoint.Ssid),
|
||||
font = User_config.font.specify .. ",extra bold 16",
|
||||
halign = "center",
|
||||
valign = "center",
|
||||
@@ -115,7 +83,30 @@ function ap_form.new(args)
|
||||
right = dpi(20),
|
||||
},
|
||||
-- Change to inputtextbox container
|
||||
settigns_form.password,
|
||||
{
|
||||
{
|
||||
{
|
||||
password,
|
||||
widget = wibox.container.margin,
|
||||
margins = 5,
|
||||
id = "marg"
|
||||
},
|
||||
widget = wibox.container.constraint,
|
||||
strategy = "exact",
|
||||
width = 400,
|
||||
height = 50,
|
||||
id = "const"
|
||||
},
|
||||
widget = wibox.container.background,
|
||||
bg = "#212121",
|
||||
fg = "#F0F0F0",
|
||||
border_color = "#414141",
|
||||
border_width = 2,
|
||||
shape = gshape.rounded_rect,
|
||||
forced_width = 300,
|
||||
forced_height = 50,
|
||||
id = "password_container"
|
||||
},
|
||||
layout = wibox.layout.align.horizontal
|
||||
},
|
||||
{ -- Actions
|
||||
@@ -181,7 +172,7 @@ function ap_form.new(args)
|
||||
widget = wibox.container.margin,
|
||||
margins = dpi(10)
|
||||
},
|
||||
placement = awful.placement.centered,
|
||||
placement = aplacement.centered,
|
||||
ontop = true,
|
||||
visible = false,
|
||||
width = dpi(600),
|
||||
@@ -195,6 +186,30 @@ function ap_form.new(args)
|
||||
screen = args.screen,
|
||||
}
|
||||
|
||||
local password_container = ret.widget:get_children_by_id("password_container")[1]
|
||||
|
||||
-- Focus the searchbar when its left clicked
|
||||
password_container:buttons(gtable.join {
|
||||
abutton({}, 1, function()
|
||||
password:focus()
|
||||
end)
|
||||
})
|
||||
|
||||
--#region Hover signals to change the cursor to a text cursor
|
||||
local old_cursor, old_wibox
|
||||
password_container:connect_signal("mouse::enter", function()
|
||||
local wid = capi.mouse.current_wibox
|
||||
if wid then
|
||||
old_cursor, old_wibox = wid.cursor, wid
|
||||
wid.cursor = "xterm"
|
||||
end
|
||||
end)
|
||||
password_container:connect_signal("mouse::leave", function()
|
||||
old_wibox.cursor = old_cursor
|
||||
old_wibox = nil
|
||||
end)
|
||||
--#endregion
|
||||
|
||||
gtable.crush(ret, ap_form, true)
|
||||
|
||||
local checkbox = ret.widget:get_children_by_id("checkbox")[1]
|
||||
@@ -210,13 +225,10 @@ function ap_form.new(args)
|
||||
|
||||
local connect_button = ret.widget:get_children_by_id("connect_button")[1]
|
||||
connect_button:connect_signal("button::press", function()
|
||||
ret:emit_signal("ap_form::connect", {
|
||||
ssid = args.ssid,
|
||||
password = settigns_form.password:get_text(),
|
||||
auto_connect = ret.widget:get_children_by_id("checkbox")[1].checked
|
||||
})
|
||||
print("Connect to " .. args.ssid:get_text(), "\nPassword: " .. settigns_form.password:get_text(),
|
||||
"\nAuto connect: " .. tostring(ret.widget:get_children_by_id("checkbox")[1].checked))
|
||||
password:stop()
|
||||
args.ap:connect(args.NetworkManagerAccessPoint, password:get_text(),
|
||||
ret.widget:get_children_by_id("checkbox")[1].checked)
|
||||
ret:popup_toggle()
|
||||
end)
|
||||
Hover_signal(connect_button)
|
||||
|
||||
|
||||
@@ -4,12 +4,11 @@
|
||||
|
||||
-- Awesome Libs
|
||||
local awful = require("awful")
|
||||
local dbus_proxy = require("dbus_proxy")
|
||||
local dbus_proxy = require("src.lib.lua-dbus_proxy.src.dbus_proxy")
|
||||
local dpi = require("beautiful").xresources.apply_dpi
|
||||
local gtable = require("gears").table
|
||||
local gtimer = require("gears").timer
|
||||
local gshape = require("gears").shape
|
||||
local gobject = require("gears").object
|
||||
local gcolor = require("gears").color
|
||||
local gears = require("gears")
|
||||
local lgi = require("lgi")
|
||||
@@ -24,11 +23,6 @@ local dnd_widget = require("awful.widget.toggle_widget")
|
||||
|
||||
local icondir = gears.filesystem.get_configuration_dir() .. "src/assets/icons/network/"
|
||||
|
||||
|
||||
local capi = {
|
||||
awesome = awesome,
|
||||
}
|
||||
|
||||
local network = { mt = {} }
|
||||
|
||||
network.NMState = {
|
||||
@@ -63,31 +57,6 @@ network.DeviceState = {
|
||||
FAILED = 120
|
||||
}
|
||||
|
||||
local function flags_to_security(flags, wpa_flags, rsn_flags)
|
||||
local str = ""
|
||||
if flags == 1 and wpa_flags == 0 and rsn_flags == 0 then
|
||||
str = str .. " WEP"
|
||||
end
|
||||
if wpa_flags ~= 0 then
|
||||
str = str .. " WPA1"
|
||||
end
|
||||
if not rsn_flags ~= 0 then
|
||||
str = str .. " WPA2"
|
||||
end
|
||||
if wpa_flags == 512 or rsn_flags == 512 then
|
||||
str = str .. " 802.1X"
|
||||
end
|
||||
|
||||
return (str:gsub("^%s", ""))
|
||||
end
|
||||
|
||||
local function generate_uuid()
|
||||
return string.gsub('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', '[xy]', function(c)
|
||||
local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
|
||||
return string.format('%x', v)
|
||||
end)
|
||||
end
|
||||
|
||||
function network:get_wifi_proxy()
|
||||
local devices = self._private.NetworkManager:GetDevices()
|
||||
for _, path in ipairs(devices) do
|
||||
@@ -146,74 +115,16 @@ function network.device_state_to_string(state)
|
||||
return device_state_to_string[state]
|
||||
end
|
||||
|
||||
function network:get_access_point_connections(ssid)
|
||||
local cn = {}
|
||||
|
||||
local connections = self._private.NetworkManagerSettings:ListConnections()
|
||||
for _, connection_path in ipairs(connections) do
|
||||
local NetworkManagerSettingsConnection = dbus_proxy.Proxy:new {
|
||||
bus = dbus_proxy.Bus.SYSTEM,
|
||||
name = "org.freedesktop.NetworkManager",
|
||||
interface = "org.freedesktop.NetworkManager.Settings.Connection",
|
||||
path = connection_path
|
||||
}
|
||||
|
||||
if NetworkManagerSettingsConnection.Filename:find(ssid) then
|
||||
table.insert(cn, NetworkManagerSettingsConnection)
|
||||
end
|
||||
end
|
||||
|
||||
return cn
|
||||
end
|
||||
|
||||
function network:create_profile(ap, password, auto_connect)
|
||||
local s_wsec = {}
|
||||
if ap.security ~= "" then
|
||||
if ap.security:match("WPA") then
|
||||
s_wsec["key-mgmt"] = lgi.GLib.Variant("s", "wpa-psk")
|
||||
s_wsec["auth-alg"] = lgi.GLib.Variant("s", "open")
|
||||
--s_wsec["psk"] = lgi.GLib.Variant("s", helpers.string.trim(password))
|
||||
else
|
||||
s_wsec["key-mgmt"] = lgi.GLib.Variant("s", "None")
|
||||
s_wsec["wep-key-type"] = lgi.GLib.Variant("s", NM.WepKeyType.PASSPHRASE)
|
||||
--s_wsec["wep-key0"] = lgi.GLib.Variant("s", helpers.string.trim(password))
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
["connection"] = {
|
||||
-- ["interface-name"] = lgi.GLib.Variant("s", ap.device_interface),
|
||||
["uuid"] = lgi.GLib.Variant("s", generate_uuid()),
|
||||
["id"] = lgi.GLib.Variant("s", ap.ssid),
|
||||
["type"] = lgi.GLib.Variant("s", "802-11-wireless"),
|
||||
["autoconnect"] = lgi.GLib.Variant("b", auto_connect),
|
||||
},
|
||||
["ipv4"] = {
|
||||
["method"] = lgi.GLib.Variant("s", "auto")
|
||||
},
|
||||
["ipv6"] = {
|
||||
["method"] = lgi.GLib.Variant("s", "auto"),
|
||||
},
|
||||
["802-11-wireless"] = {
|
||||
["mode"] = lgi.GLib.Variant("s", "infrastructure"),
|
||||
},
|
||||
["802-11-wireless-security"] = s_wsec
|
||||
}
|
||||
end
|
||||
|
||||
---Scan for access points and create a widget for each one.
|
||||
function network:scan_access_points()
|
||||
local ap_list = self:get_children_by_id("wifi_ap_list")[1]
|
||||
|
||||
ap_list:reset()
|
||||
self._private.NetworkManagerDeviceWireless:RequestScanAsync(function(proxy, context, success, failure)
|
||||
if failure then
|
||||
-- Send an error notification
|
||||
print("AP Scan failed: ", failure)
|
||||
return
|
||||
end
|
||||
|
||||
-- Get every access point even those who hide their ssid
|
||||
print(#self._private.NetworkManagerDeviceWireless:GetAllAccessPoints())
|
||||
for _, ap in ipairs(self._private.NetworkManagerDeviceWireless:GetAllAccessPoints()) do
|
||||
|
||||
-- Create a new proxy for every ap
|
||||
@@ -223,69 +134,27 @@ function network:scan_access_points()
|
||||
interface = "org.freedesktop.NetworkManager.AccessPoint",
|
||||
path = ap
|
||||
}
|
||||
--[[ for _, ap2 in ipairs(ap_list.children) do
|
||||
if ap2.NetworkManagerAccessPoint.HwAddress:match(ap.HwAddress or "") then
|
||||
goto continue
|
||||
end
|
||||
end ]]
|
||||
|
||||
print("AP Found: ", NetworkManagerAccessPoint.HwAddress, NM.utils_ssid_to_utf8(NetworkManagerAccessPoint.Ssid),
|
||||
NetworkManagerAccessPoint.Strength)
|
||||
|
||||
|
||||
-- We are only interested in those with a ssid
|
||||
if NetworkManagerAccessPoint.Ssid then
|
||||
ap_list:add(access_point { NetworkManagerAccessPoint = NetworkManagerAccessPoint })
|
||||
ap_list:add(access_point {
|
||||
NetworkManagerAccessPoint = NetworkManagerAccessPoint,
|
||||
NetworkManagerDevice = self._private.NetworkManagerDevice,
|
||||
NetworkManagerSettings = self._private.NetworkManagerSettings,
|
||||
NetworkManager = self._private.NetworkManager,
|
||||
NetworkManagerDeviceWireless = self._private.NetworkManagerDeviceWireless
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(ap_list, function(a, b)
|
||||
return a.NetworkManagerAccessPoint.Strength > b.NetworkManagerAccessPoint.Strength
|
||||
end)
|
||||
print("AP_Anzahl: ", #ap_list.children)
|
||||
end, { call_id = "my-id" }, {})
|
||||
end
|
||||
|
||||
function network:is_ap_active(ap)
|
||||
return ap.path == self._private.wifi_proxy.ActiveAccessPoint
|
||||
end
|
||||
|
||||
function network:disconnect_ap()
|
||||
self._private.NetworkManager:DeactivateConnection(self._private.NetworkManagerDevice.ActiveConnection)
|
||||
end
|
||||
|
||||
function network:connect_ap(ap, pw, auto_connect)
|
||||
local connections = self:get_access_point_connections(ap.ssid)
|
||||
local profile = self:create_profile(ap, pw, auto_connect)
|
||||
|
||||
if #connections == 0 then
|
||||
self._private.NetworkManager:AddAndActivateConnectionAsync(function(proxy, context, success, failure)
|
||||
if failure then
|
||||
self:emit_signal("NM::AccessPointFailed", tostring(failure))
|
||||
return
|
||||
end
|
||||
|
||||
self:emit_signal("NM::AccessPointConnected", ap.ssid)
|
||||
end, { call_id = "my-id", profile, ap.device_proxy_path, ap.path })
|
||||
else
|
||||
connections[1]:Update(profile)
|
||||
self._private.NetworkManager:ActivateConnectionAsync(function(proxy, context, success, failure)
|
||||
if failure then
|
||||
self:emit_signal("NM::AccessPointFailed", tostring(failure))
|
||||
return
|
||||
end
|
||||
|
||||
self:emit_signal("NM::AccessPointConnected", ap.ssid)
|
||||
end, { call_id = "my-id", connections[1].object_path, ap.device_proxy_path, ap.path })
|
||||
end
|
||||
end
|
||||
|
||||
function network:toggle_access_point(ap, password, auto_connect)
|
||||
if self:is_ap_active(ap) then
|
||||
self:disconnect_ap()
|
||||
else
|
||||
self:connect_ap(ap, password, auto_connect)
|
||||
end
|
||||
return ap.path == self._private.NetworkManagerDeviceWireless.ActiveAccessPoint
|
||||
end
|
||||
|
||||
---Toggles networking on or off
|
||||
|
||||
Reference in New Issue
Block a user