Improve network settings
This commit is contained in:
parent
2cedf36d52
commit
7505e986cb
@ -75,6 +75,11 @@ Engine *NetworkManager::engine() const
|
||||
return m_engine;
|
||||
}
|
||||
|
||||
bool NetworkManager::loading()
|
||||
{
|
||||
return m_loading;
|
||||
}
|
||||
|
||||
QString NetworkManager::nameSpace() const
|
||||
{
|
||||
return "NetworkManager";
|
||||
@ -90,10 +95,18 @@ void NetworkManager::init()
|
||||
return;
|
||||
}
|
||||
|
||||
m_loading = true;
|
||||
emit loadingChanged();
|
||||
|
||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetNetworkStatus", QVariantMap(), this, "getStatusReply");
|
||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetNetworkDevices", QVariantMap(), this, "getDevicesReply");
|
||||
}
|
||||
|
||||
bool NetworkManager::available() const
|
||||
{
|
||||
return m_available;
|
||||
}
|
||||
|
||||
NetworkManager::NetworkManagerState NetworkManager::state() const
|
||||
{
|
||||
return m_state;
|
||||
@ -159,7 +172,18 @@ void NetworkManager::disconnectInterface(const QString &interface)
|
||||
|
||||
void NetworkManager::getStatusReply(const QVariantMap ¶ms)
|
||||
{
|
||||
// qDebug() << "NetworkManager reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||
m_loading = false;
|
||||
emit loadingChanged();
|
||||
|
||||
if (params.value("params").toMap().value("networkManagerError").toString() != "NetworkManagerErrorNoError") {
|
||||
qWarning() << "NetworkManager error:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||
m_available = false;
|
||||
emit availableChanged();
|
||||
return;
|
||||
}
|
||||
|
||||
m_available = true;
|
||||
emit availableChanged();
|
||||
|
||||
QVariantMap statusMap = params.value("params").toMap().value("status").toMap();
|
||||
|
||||
@ -207,6 +231,7 @@ void NetworkManager::getDevicesReply(const QVariantMap ¶ms)
|
||||
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
||||
device->currentAccessPoint()->setProtected(currentApMap.value("protected").toBool());
|
||||
device->currentAccessPoint()->setSignalStrength(currentApMap.value("signalStrength").toInt());
|
||||
device->currentAccessPoint()->setFrequency(currentApMap.value("frequency").toDouble());
|
||||
m_wirelessNetworkDevices->addNetworkDevice(device);
|
||||
}
|
||||
}
|
||||
@ -237,6 +262,7 @@ void NetworkManager::getAccessPointsReply(const QVariantMap ¶ms)
|
||||
ap->setSsid(apMap.value("ssid").toString());
|
||||
ap->setProtected(apMap.value("protected").toBool());
|
||||
ap->setSignalStrength(apMap.value("signalStrength").toInt());
|
||||
ap->setFrequency(apMap.value("frequency").toDouble());
|
||||
dev->accessPoints()->addWirelessAccessPoint(ap);
|
||||
}
|
||||
|
||||
|
||||
@ -46,6 +46,9 @@ class NetworkManager : public JsonHandler
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(Engine *engine READ engine WRITE setEngine NOTIFY engineChanged)
|
||||
|
||||
Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
|
||||
Q_PROPERTY(bool available READ available NOTIFY availableChanged)
|
||||
|
||||
Q_PROPERTY(NetworkManagerState state READ state NOTIFY stateChanged)
|
||||
Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged)
|
||||
Q_PROPERTY(bool wirelessNetworkingEnabled READ wirelessNetworkingEnabled NOTIFY wirelessNetworkingEnabledChanged)
|
||||
@ -72,8 +75,11 @@ public:
|
||||
void setEngine(Engine *engine);
|
||||
Engine *engine() const;
|
||||
|
||||
bool loading();
|
||||
|
||||
QString nameSpace() const override;
|
||||
|
||||
bool available() const;
|
||||
NetworkManagerState state() const;
|
||||
bool networkingEnabled() const;
|
||||
bool wirelessNetworkingEnabled() const;
|
||||
@ -103,13 +109,16 @@ private slots:
|
||||
|
||||
signals:
|
||||
void engineChanged();
|
||||
void loadingChanged();
|
||||
void availableChanged();
|
||||
void stateChanged();
|
||||
void networkingEnabledChanged();
|
||||
void wirelessNetworkingEnabledChanged();
|
||||
|
||||
private:
|
||||
Engine *m_engine = nullptr;
|
||||
|
||||
bool m_loading = false;
|
||||
bool m_available = false;
|
||||
NetworkManagerState m_state = NetworkManagerStateUnknown;
|
||||
bool m_networkingEnabled = false;
|
||||
bool m_wirelessNetworkingEnabled = false;
|
||||
|
||||
@ -85,7 +85,7 @@ int WirelessAccessPoint::signalStrength() const
|
||||
return m_signalStrength;
|
||||
}
|
||||
|
||||
void WirelessAccessPoint::setSignalStrength(const int &signalStrength)
|
||||
void WirelessAccessPoint::setSignalStrength(int signalStrength)
|
||||
{
|
||||
if (m_signalStrength == signalStrength)
|
||||
return;
|
||||
@ -99,7 +99,7 @@ bool WirelessAccessPoint::isProtected() const
|
||||
return m_isProtected;
|
||||
}
|
||||
|
||||
void WirelessAccessPoint::setProtected(const bool &isProtected)
|
||||
void WirelessAccessPoint::setProtected(bool isProtected)
|
||||
{
|
||||
if (m_isProtected == isProtected)
|
||||
return;
|
||||
@ -108,3 +108,16 @@ void WirelessAccessPoint::setProtected(const bool &isProtected)
|
||||
emit isProtectedChanged(m_isProtected);
|
||||
|
||||
}
|
||||
|
||||
double WirelessAccessPoint::frequency() const
|
||||
{
|
||||
return m_frequency;
|
||||
}
|
||||
|
||||
void WirelessAccessPoint::setFrequency(double frequency)
|
||||
{
|
||||
if (!qFuzzyCompare(m_frequency,frequency)) {
|
||||
m_frequency = frequency;
|
||||
emit frequencyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,6 +42,7 @@ class WirelessAccessPoint : public QObject
|
||||
Q_PROPERTY(QString hostAddress READ hostAddress NOTIFY hostAddressChanged)
|
||||
Q_PROPERTY(int signalStrength READ signalStrength NOTIFY signalStrengthChanged)
|
||||
Q_PROPERTY(bool isProtected READ isProtected NOTIFY isProtectedChanged)
|
||||
Q_PROPERTY(double frequency READ frequency NOTIFY frequencyChanged)
|
||||
|
||||
public:
|
||||
WirelessAccessPoint(QObject *parent = nullptr);
|
||||
@ -56,17 +57,13 @@ public:
|
||||
void setHostAddress(const QString &hostAddress);
|
||||
|
||||
int signalStrength() const;
|
||||
void setSignalStrength(const int &signalStrength);
|
||||
void setSignalStrength(int signalStrength);
|
||||
|
||||
bool isProtected() const;
|
||||
void setProtected(const bool &isProtected);
|
||||
void setProtected(bool isProtected);
|
||||
|
||||
private:
|
||||
QString m_ssid;
|
||||
QString m_macAddress;
|
||||
QString m_hostAddress;
|
||||
int m_signalStrength = 0;
|
||||
bool m_isProtected = false;
|
||||
double frequency() const;
|
||||
void setFrequency(double frequency);
|
||||
|
||||
signals:
|
||||
void ssidChanged(const QString &ssid);
|
||||
@ -74,6 +71,15 @@ signals:
|
||||
void hostAddressChanged(const QString &hostAddress);
|
||||
void signalStrengthChanged(int signalStrength);
|
||||
void isProtectedChanged(bool isProtected);
|
||||
void frequencyChanged();
|
||||
|
||||
private:
|
||||
QString m_ssid;
|
||||
QString m_macAddress;
|
||||
QString m_hostAddress;
|
||||
int m_signalStrength = 0;
|
||||
bool m_isProtected = false;
|
||||
double m_frequency = 0;
|
||||
};
|
||||
|
||||
#endif // WIRELESSACCESSPOINT_H
|
||||
|
||||
@ -69,16 +69,19 @@ QVariant WirelessAccessPoints::data(const QModelIndex &index, int role) const
|
||||
return QVariant();
|
||||
|
||||
WirelessAccessPoint *accessPoint = m_wirelessAccessPoints.at(index.row());
|
||||
if (role == WirelessAccesspointRoleSsid) {
|
||||
switch (role) {
|
||||
case WirelessAccesspointRoleSsid:
|
||||
return accessPoint->ssid();
|
||||
} else if (role == WirelessAccesspointRoleMacAddress) {
|
||||
case WirelessAccesspointRoleMacAddress:
|
||||
return accessPoint->macAddress();
|
||||
} else if (role == WirelessAccesspointRoleHostAddress) {
|
||||
case WirelessAccesspointRoleHostAddress:
|
||||
return accessPoint->hostAddress();
|
||||
} else if (role == WirelessAccesspointRoleSignalStrength) {
|
||||
case WirelessAccesspointRoleSignalStrength:
|
||||
return accessPoint->signalStrength();
|
||||
} else if (role == WirelessAccesspointRoleProtected) {
|
||||
case WirelessAccesspointRoleProtected:
|
||||
return accessPoint->isProtected();
|
||||
case WirelessAccessPointRoleFrequency:
|
||||
return accessPoint->frequency();
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
@ -159,6 +162,7 @@ QHash<int, QByteArray> WirelessAccessPoints::roleNames() const
|
||||
roles[WirelessAccesspointRoleHostAddress] = "hostAddress";
|
||||
roles[WirelessAccesspointRoleSignalStrength] = "signalStrength";
|
||||
roles[WirelessAccesspointRoleProtected] = "protected";
|
||||
roles[WirelessAccessPointRoleFrequency] = "frequency";
|
||||
return roles;
|
||||
}
|
||||
|
||||
|
||||
@ -47,7 +47,8 @@ public:
|
||||
WirelessAccesspointRoleMacAddress,
|
||||
WirelessAccesspointRoleHostAddress,
|
||||
WirelessAccesspointRoleSignalStrength,
|
||||
WirelessAccesspointRoleProtected
|
||||
WirelessAccesspointRoleProtected,
|
||||
WirelessAccessPointRoleFrequency
|
||||
};
|
||||
|
||||
explicit WirelessAccessPoints(QObject *parent = nullptr);
|
||||
|
||||
@ -75,7 +75,7 @@ Page {
|
||||
|
||||
delegate: NymeaListItemDelegate {
|
||||
width: parent.width
|
||||
text: model.ssid
|
||||
text: model.ssid !== "" ? model.ssid : qsTr("Hidden Network")
|
||||
enabled: !networkManagerController.manager.working
|
||||
subText: model.hostAddress
|
||||
|
||||
|
||||
@ -38,6 +38,7 @@ import "../components"
|
||||
SettingsPageBase {
|
||||
id: root
|
||||
title: qsTr("Network settings")
|
||||
busy: networkManager.loading
|
||||
|
||||
NetworkManager {
|
||||
id: networkManager
|
||||
@ -75,14 +76,33 @@ SettingsPageBase {
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.topMargin: app.margins * 6
|
||||
visible: !networkManager.available
|
||||
spacing: app.margins
|
||||
ColorIcon {
|
||||
Layout.preferredHeight: app.iconSize
|
||||
Layout.preferredWidth: app.iconSize
|
||||
name: "../images/network-wired-offline.svg"
|
||||
}
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("Network management is unavailable on this system.")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SettingsPageSectionHeader {
|
||||
text: qsTr("General")
|
||||
visible: networkManager.available
|
||||
}
|
||||
|
||||
NymeaListItemDelegate {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Current connection state")
|
||||
prominentSubText: false
|
||||
visible: networkManager.available
|
||||
subText: {
|
||||
switch (networkManager.state) {
|
||||
case NetworkManager.NetworkManagerStateUnknown:
|
||||
@ -133,6 +153,7 @@ SettingsPageBase {
|
||||
subText: qsTr("Enable or disable networking altogether")
|
||||
prominentSubText: false
|
||||
progressive: false
|
||||
visible: networkManager.available
|
||||
additionalItem: Switch {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
checked: networkManager.networkingEnabled
|
||||
@ -165,6 +186,7 @@ SettingsPageBase {
|
||||
|
||||
SettingsPageSectionHeader {
|
||||
text: qsTr("Wired network")
|
||||
visible: networkManager.available
|
||||
}
|
||||
|
||||
Label {
|
||||
@ -173,15 +195,17 @@ SettingsPageBase {
|
||||
Layout.rightMargin: app.margins
|
||||
text: qsTr("No wired network interfaces available")
|
||||
wrapMode: Text.WordWrap
|
||||
visible: networkManager.wiredNetworkDevices.count == 0
|
||||
visible: networkManager.available && networkManager.wiredNetworkDevices.count == 0
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: networkManager.wiredNetworkDevices
|
||||
|
||||
NymeaListItemDelegate {
|
||||
Layout.fillWidth: true
|
||||
iconName: model.pluggedIn ? "../images/network-wired.svg" : "../images/network-wired-offline.svg"
|
||||
text: model.interface + " (" + model.macAddress + ")"
|
||||
visible: networkManager.available
|
||||
subText: {
|
||||
var ret = model.pluggedIn ? qsTr("Plugged in") : qsTr("Unplugged")
|
||||
ret += " - "
|
||||
@ -194,6 +218,7 @@ SettingsPageBase {
|
||||
|
||||
SettingsPageSectionHeader {
|
||||
text: qsTr("Wireless network")
|
||||
visible: networkManager.available
|
||||
}
|
||||
|
||||
NymeaListItemDelegate {
|
||||
@ -205,6 +230,7 @@ SettingsPageBase {
|
||||
additionalItem: Switch {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
checked: networkManager.wirelessNetworkingEnabled
|
||||
visible: networkManager.available
|
||||
onClicked: {
|
||||
if (!checked) {
|
||||
var dialog = Qt.createComponent(Qt.resolvedUrl("../components/MeaDialog.qml"));
|
||||
@ -238,11 +264,12 @@ SettingsPageBase {
|
||||
Layout.rightMargin: app.margins
|
||||
text: qsTr("No wired network interfaces available")
|
||||
wrapMode: Text.WordWrap
|
||||
visible: networkManager.wirelessNetworkDevices.count == 0
|
||||
visible: networkManager.available &&networkManager.wirelessNetworkDevices.count == 0
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: networkManager.wirelessNetworkDevices
|
||||
visible: networkManager.available
|
||||
NymeaListItemDelegate {
|
||||
Layout.fillWidth: true
|
||||
iconName: {
|
||||
@ -304,8 +331,8 @@ SettingsPageBase {
|
||||
model: apProxy
|
||||
delegate: NymeaListItemDelegate {
|
||||
Layout.fillWidth: true
|
||||
text: model.ssid
|
||||
subText: model.macAddress
|
||||
text: model.ssid !== "" ? model.ssid : qsTr("Hidden Network")
|
||||
subText: "%1 (%2)".arg(model.macAddress).arg(model.frequency < 3 ? "2.4GHz" : "5GHz")
|
||||
iconName: {
|
||||
var ret = "../images/nm-signal-";
|
||||
if (model.signalStrength > 90) {
|
||||
@ -412,7 +439,13 @@ SettingsPageBase {
|
||||
NymeaListItemDelegate {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Signal strength")
|
||||
subText: currentApPage.wirelessNetworkDevice.currentAccessPoint.signalStrength
|
||||
subText: currentApPage.wirelessNetworkDevice.currentAccessPoint.signalStrength + " %"
|
||||
progressive: false
|
||||
}
|
||||
NymeaListItemDelegate {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("WiFi frequency")
|
||||
subText: currentApPage.wirelessNetworkDevice.currentAccessPoint.frequency + " GHz"
|
||||
progressive: false
|
||||
}
|
||||
|
||||
@ -425,7 +458,6 @@ SettingsPageBase {
|
||||
pageStack.pop(root);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user