WiFI UI show IP (#2735)

WiFi widget now shows the IP of currently connected network.
pull/2745/head
grekiki 2020-12-11 00:29:31 +01:00 committed by GitHub
parent bffdfd5303
commit c16c8f3c2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 10 deletions

View File

@ -43,8 +43,12 @@ WifiUI::WifiUI(QWidget *parent, int page_length) : QWidget(parent), networks_per
wifi_widget = new QWidget;
QVBoxLayout* networkLayout = new QVBoxLayout;
QHBoxLayout *tethering_field = new QHBoxLayout;
tethering_field->addWidget(new QLabel("Enable Tethering"));
tethering_field->addSpacing(50);
ipv4 = new QLabel("");
tethering_field->addWidget(ipv4);
tethering_field->addWidget(new QLabel("Enable Tethering"));
Toggle* toggle_switch = new Toggle(this);
toggle_switch->setFixedSize(150, 100);
tethering_field->addWidget(toggle_switch);
@ -58,7 +62,6 @@ WifiUI::WifiUI(QWidget *parent, int page_length) : QWidget(parent), networks_per
tetheringWidget->setFixedHeight(150);
networkLayout->addWidget(tetheringWidget);
vlayout = new QVBoxLayout;
wifi_widget->setLayout(vlayout);
networkLayout->addWidget(wifi_widget);
@ -99,7 +102,7 @@ void WifiUI::refresh() {
wifi->request_scan();
wifi->refreshNetworks();
ipv4->setText(wifi->ipv4_address);
clearLayout(vlayout);
connectButtons = new QButtonGroup(this);

View File

@ -18,7 +18,7 @@ public:
explicit WifiUI(QWidget *parent = 0, int page_length = 5);
private:
WifiManager* wifi = nullptr;
WifiManager *wifi = nullptr;
const int networks_per_page;
QStackedWidget *swidget;
@ -31,6 +31,7 @@ private:
QString text;
QButtonGroup *connectButtons;
bool tetheringEnabled;
QLabel *ipv4;
void connectToNetwork(Network n);
QString getStringFromUser();

View File

@ -32,6 +32,7 @@ QString device_iface = "org.freedesktop.NetworkManager.Device";
QString wireless_device_iface = "org.freedesktop.NetworkManager.Device.Wireless";
QString ap_iface = "org.freedesktop.NetworkManager.AccessPoint";
QString connection_iface = "org.freedesktop.NetworkManager.Connection.Active";
QString ipv4config_iface = "org.freedesktop.NetworkManager.IP4Config";
QString nm_service = "org.freedesktop.NetworkManager";
@ -87,7 +88,7 @@ void WifiManager::refreshNetworks() {
bus = QDBusConnection::systemBus();
seen_networks.clear();
seen_ssids.clear();
ipv4_address = get_ipv4_address();
for (Network &network : get_networks()) {
if (seen_ssids.count(network.ssid)) {
continue;
@ -97,6 +98,32 @@ void WifiManager::refreshNetworks() {
}
}
QString WifiManager::get_ipv4_address(){
if (raw_adapter_state != state_connected){
return "";
}
QVector<QDBusObjectPath> conns = get_active_connections();
for (auto p : conns){
QString active_connection = p.path();
QDBusInterface nm(nm_service, active_connection, props_iface, bus);
QDBusObjectPath pth = get_response<QDBusObjectPath>(nm.call("Get", connection_iface, "Ip4Config"));
QString ip4config = pth.path();
QDBusInterface nm2(nm_service, ip4config, props_iface, bus);
const QDBusArgument &arr = get_response<QDBusArgument>(nm2.call("Get", ipv4config_iface, "AddressData"));
QMap<QString, QVariant> pth2;
arr.beginArray();
while (!arr.atEnd()){
arr >> pth2;
QString ipv4 = pth2.value("address").value<QString>();
arr.endArray();
return ipv4;
}
arr.endArray();
}
return "";
}
QList<Network> WifiManager::get_networks() {
QList<Network> r;
QDBusInterface nm(nm_service, adapter, wireless_device_iface, bus);
@ -207,7 +234,7 @@ void WifiManager::deactivate_connections(QString ssid) {
QVector<QDBusObjectPath> WifiManager::get_active_connections() {
QDBusInterface nm(nm_service, nm_path, props_iface, bus);
QDBusMessage response = nm.call("Get", nm_iface, "ActiveConnections");
QDBusArgument arr = get_response<QDBusArgument>(response);
const QDBusArgument &arr = get_response<QDBusArgument>(response);
QVector<QDBusObjectPath> conns;
QDBusObjectPath path;
@ -216,6 +243,7 @@ QVector<QDBusObjectPath> WifiManager::get_active_connections() {
arr >> path;
conns.push_back(path);
}
arr.endArray();
return conns;
}
@ -346,10 +374,10 @@ void WifiManager::enableTethering() {
connection["802-11-wireless-security"]["psk"] = "swagswagcomma";
connection["ipv4"]["method"] = "shared";
QMap<QString,QVariant> adress1;
adress1["address"] = "192.168.43.1";
adress1["prefix"] = 24u;
connection["ipv4"]["address-data"] = QVariant::fromValue(IpConfig() << adress1);
QMap<QString,QVariant> address;
address["address"] = "192.168.43.1";
address["prefix"] = 24u;
connection["ipv4"]["address-data"] = QVariant::fromValue(IpConfig() << address);
connection["ipv4"]["gateway"] = "192.168.43.1";
connection["ipv6"]["method"] = "ignore";

View File

@ -32,6 +32,7 @@ public:
void request_scan();
QVector<Network> seen_networks;
QString ipv4_address;
void refreshNetworks();
void connect(Network ssid);
@ -52,6 +53,7 @@ private:
QString tethering_ssid;
QString get_adapter();
QString get_ipv4_address();
QList<Network> get_networks();
void connect(QByteArray ssid, QString username, QString password, SecurityType security_type);
QString get_active_ap();