summaryrefslogtreecommitdiffstats
path: root/network/wifiadapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'network/wifiadapter.cpp')
-rw-r--r--network/wifiadapter.cpp169
1 files changed, 105 insertions, 64 deletions
diff --git a/network/wifiadapter.cpp b/network/wifiadapter.cpp
index 98f73fa..0670eff 100644
--- a/network/wifiadapter.cpp
+++ b/network/wifiadapter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 Konsulko Group
+ * Copyright (C) 2019,2022 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,92 +19,133 @@
#include <QtQml/QQmlEngine>
#include "network.h"
-#include "networkadapter.h"
+#include "wifiadapter.h"
#include "wifinetworkmodel.h"
#include "connectionprofile.h"
WifiAdapter::WifiAdapter(Network *network, QQmlContext *context, QObject *parent) :
- QObject(parent),
- AdapterIf(),
- m_wifiConnected(false),
- m_wifiEnabled(false),
- m_wifiStrength(0),
- m_model(nullptr),
- nw(network)
+ QObject(parent),
+ AdapterIf(),
+ m_wifiConnected(false),
+ m_wifiEnabled(false),
+ m_wifiStrength(0),
+ m_model(nullptr),
+ nw(network)
{
- m_model = new WifiNetworkModel();
- QSortFilterProxyModel *model = new QSortFilterProxyModel();
- model->setSourceModel(m_model);
- model->setSortRole(WifiNetworkModel::WifiNetworkRoles::SsidRole);
- model->setSortCaseSensitivity(Qt::CaseInsensitive);
- model->sort(0);
-
- context->setContextProperty("WifiNetworkModel", m_model);
- QObject::connect(m_model, &WifiNetworkModel::strengthChanged, this, &WifiAdapter::updateWifiStrength);
- context->setContextProperty("WifiAdapter", this);
+ m_model = new WifiNetworkModel();
+ QSortFilterProxyModel *model = new QSortFilterProxyModel();
+ model->setSourceModel(m_model);
+ model->setSortRole(WifiNetworkModel::WifiNetworkRoles::SsidRole);
+ model->setSortCaseSensitivity(Qt::CaseInsensitive);
+ model->sort(0);
+
+ context->setContextProperty("WifiNetworkModel", m_model);
+ QObject::connect(m_model, &WifiNetworkModel::strengthChanged, this, &WifiAdapter::updateWifiStrength);
+ context->setContextProperty("WifiAdapter", this);
}
WifiAdapter::~WifiAdapter()
{
- delete m_model;
+ delete m_model;
}
-void WifiAdapter::updateStatus(QJsonObject properties)
+void WifiAdapter::updateStatus(const QVariantMap &properties)
{
- if (properties.contains("connected")) {
- m_wifiConnected = properties.value("connected").toBool();
- emit wifiConnectedChanged(m_wifiConnected);
- }
-
- if (properties.contains("powered")) {
- m_wifiEnabled = properties.value("powered").toBool();
- emit wifiEnabledChanged(m_wifiEnabled);
- if (m_wifiEnabled)
- nw->getServices();
- }
+ QString key = "Connected";
+ if (properties.contains(key)) {
+ m_wifiConnected = properties.value(key).toBool();
+ emit wifiConnectedChanged(m_wifiConnected);
+ }
+
+ key = "Powered";
+ if (properties.contains(key)) {
+ m_wifiEnabled = properties.value(key).toBool();
+ emit wifiEnabledChanged(m_wifiEnabled);
+ if (m_wifiEnabled)
+ nw->getServices();
+ }
}
void WifiAdapter::updateWifiStrength(int strength)
{
- m_wifiStrength = strength;
- emit wifiStrengthChanged(m_wifiStrength);
+ m_wifiStrength = strength;
+ emit wifiStrengthChanged(m_wifiStrength);
}
-void WifiAdapter::updateProperties(QString id, QJsonObject properties)
+void WifiAdapter::updateProperties(const QString &id, const QVariantMap &properties)
{
- if (m_model->getNetwork(id))
- m_model->updateProperties(id, properties);
+ if (m_model->getNetwork(id))
+ m_model->updateProperties(id, properties);
}
-bool WifiAdapter::addService(QString id, QJsonObject properties)
+bool WifiAdapter::addService(const QString &id, const QVariantMap &properties)
{
- QString type = properties.value("type").toString();
- if (type != getType())
- return false;
-
- QString ssid = properties.value("name").toString();
- // Ignore hidden SSIDs or services already added
- if (m_model->getNetwork(id) || (ssid == ""))
- return false;
-
- QString state = properties.value("state").toString();
- int strength = properties.value("strength").toInt();
- // Initially support only IPv4 and the first security method found
- QString address = properties.value("ipv4").toObject().value("address").toString();
- QString security = properties.value("security").toArray().at(0).toString();
-
- ConnectionProfile *network = new ConnectionProfile(address, security, id, state, ssid,
- strength, "", "", "", "", "");
- m_model->addNetwork(network);
-
- if ((state == "ready") || (state == "online"))
- updateWifiStrength(strength);
-
- return true;
+ QString type;
+ QString key = "Type";
+ if (properties.contains(key)) {
+ type = properties.value(key).toString();
+ if (type != getType())
+ return false;
+ }
+
+ QString ssid;
+ key = "Name";
+ if (properties.contains(key))
+ ssid = properties.value(key).toString();
+
+ // Ignore hidden SSIDs or services already added
+ if (m_model->getNetwork(id) || (ssid == ""))
+ return false;
+
+ QString state;
+ key = "State";
+ if (properties.contains(key))
+ state = properties.value(key).toString();
+
+ int strength = 0;
+ key = "Strength";
+ if (properties.contains(key))
+ strength = properties.value(key).toInt();
+
+ // Initially support only IPv4 and the first security method found
+ QString address;
+ key = "IPv4";
+ if (properties.contains(key)) {
+ QVariantMap ip4_map = properties.value(key).toMap();
+
+ key = "Address";
+ if (ip4_map.contains(key))
+ address = ip4_map.value(key).toString();
+ }
+
+ QString security;
+ key = "Security";
+ if (properties.contains(key)) {
+ QVariantList security_list = properties.value(key).toList();
+
+ if (!security_list.isEmpty())
+ security = security_list[0].toString();
+ }
+
+#if LIBQTAPPFW_NETWORK_DEBUG
+ qDebug() << "WifiAdapter::addService: address = " << address
+ << ", id = " << id
+ << ", state = " << state
+ << ", ssid = " << ssid
+ << ", strength = " << strength
+ << ", security = " << security;
+#endif
+ ConnectionProfile *network = new ConnectionProfile(address, security, id, state, ssid,
+ strength, "", "", "", "", "");
+ m_model->addNetwork(network);
+
+ if ((state == "ready") || (state == "online"))
+ updateWifiStrength(strength);
+
+ return true;
}
-void WifiAdapter::removeService(QString id)
+void WifiAdapter::removeService(const QString &id)
{
- m_model->removeNetwork(m_model->getNetwork(id));
-
+ m_model->removeNetwork(m_model->getNetwork(id));
}