Add support for AP mode in settings and display IP address configs
This commit is contained in:
parent
26cda609c2
commit
a1d910f759
@ -98,8 +98,8 @@ void NetworkManager::init()
|
|||||||
m_loading = true;
|
m_loading = true;
|
||||||
emit loadingChanged();
|
emit loadingChanged();
|
||||||
|
|
||||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetNetworkStatus", QVariantMap(), this, "getStatusReply");
|
m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetNetworkStatus", QVariantMap(), this, "getStatusResponse");
|
||||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetNetworkDevices", QVariantMap(), this, "getDevicesReply");
|
m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetNetworkDevices", QVariantMap(), this, "getDevicesResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkManager::available() const
|
bool NetworkManager::available() const
|
||||||
@ -132,45 +132,54 @@ WirelessNetworkDevices *NetworkManager::wirelessNetworkDevices() const
|
|||||||
return m_wirelessNetworkDevices;
|
return m_wirelessNetworkDevices;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::enableNetworking(bool enable)
|
int NetworkManager::enableNetworking(bool enable)
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("enable", enable);
|
params.insert("enable", enable);
|
||||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.EnableNetworking", params, this, "enableNetworkingReply");
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.EnableNetworking", params, this, "enableNetworkingResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::enableWirelessNetworking(bool enable)
|
int NetworkManager::enableWirelessNetworking(bool enable)
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("enable", enable);
|
params.insert("enable", enable);
|
||||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.EnableWirelessNetworking", params, this, "enableNetworkingReply");
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.EnableWirelessNetworking", params, this, "enableWirelessNetworkingResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::refreshWifis(const QString &interface)
|
void NetworkManager::refreshWifis(const QString &interface)
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("interface", interface);
|
params.insert("interface", interface);
|
||||||
int requestId = m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetWirelessAccessPoints", params, this, "getAccessPointsReply");
|
int requestId = m_engine->jsonRpcClient()->sendCommand("NetworkManager.GetWirelessAccessPoints", params, this, "getAccessPointsResponse");
|
||||||
m_apRequests.insert(requestId, interface);
|
m_apRequests.insert(requestId, interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::connectToWiFi(const QString &interface, const QString &ssid, const QString &passphrase)
|
int NetworkManager::connectToWiFi(const QString &interface, const QString &ssid, const QString &passphrase)
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("interface", interface);
|
params.insert("interface", interface);
|
||||||
params.insert("ssid", ssid);
|
params.insert("ssid", ssid);
|
||||||
params.insert("password", passphrase);
|
params.insert("password", passphrase);
|
||||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.ConnectWifiNetwork", params, this, "connectToWiFiReply");
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.ConnectWifiNetwork", params, this, "connectToWiFiResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::disconnectInterface(const QString &interface)
|
int NetworkManager::startAccessPoint(const QString &interface, const QString &ssid, const QString &passphrase)
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("interface", interface);
|
params.insert("interface", interface);
|
||||||
m_engine->jsonRpcClient()->sendCommand("NetworkManager.DisconnectInterface", params, this, "disconnectReply");
|
params.insert("ssid", ssid);
|
||||||
|
params.insert("password", passphrase);
|
||||||
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.StartAccessPoint", params, this, "startAccessPointResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::getStatusReply(const QVariantMap ¶ms)
|
int NetworkManager::disconnectInterface(const QString &interface)
|
||||||
|
{
|
||||||
|
QVariantMap params;
|
||||||
|
params.insert("interface", interface);
|
||||||
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.DisconnectInterface", params, this, "disconnectResponse");
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkManager::getStatusResponse(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
m_loading = false;
|
m_loading = false;
|
||||||
emit loadingChanged();
|
emit loadingChanged();
|
||||||
@ -206,13 +215,15 @@ void NetworkManager::getStatusReply(const QVariantMap ¶ms)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::getDevicesReply(const QVariantMap ¶ms)
|
void NetworkManager::getDevicesResponse(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
// qDebug() << "Devices reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qDebug() << "Devices reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
|
||||||
foreach (const QVariant &deviceVariant, params.value("params").toMap().value("wiredNetworkDevices").toList()) {
|
foreach (const QVariant &deviceVariant, params.value("params").toMap().value("wiredNetworkDevices").toList()) {
|
||||||
QVariantMap deviceMap = deviceVariant.toMap();
|
QVariantMap deviceMap = deviceVariant.toMap();
|
||||||
WiredNetworkDevice *device = new WiredNetworkDevice(deviceMap.value("macAddress").toString(), deviceMap.value("interface").toString(), this);
|
WiredNetworkDevice *device = new WiredNetworkDevice(deviceMap.value("macAddress").toString(), deviceMap.value("interface").toString(), this);
|
||||||
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
device->setBitRate(deviceMap.value("bitRate").toString());
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
@ -222,9 +233,13 @@ void NetworkManager::getDevicesReply(const QVariantMap ¶ms)
|
|||||||
foreach (const QVariant &deviceVariant, params.value("params").toMap().value("wirelessNetworkDevices").toList()) {
|
foreach (const QVariant &deviceVariant, params.value("params").toMap().value("wirelessNetworkDevices").toList()) {
|
||||||
QVariantMap deviceMap = deviceVariant.toMap();
|
QVariantMap deviceMap = deviceVariant.toMap();
|
||||||
WirelessNetworkDevice *device = new WirelessNetworkDevice(deviceMap.value("macAddress").toString(), deviceMap.value("interface").toString(), this);
|
WirelessNetworkDevice *device = new WirelessNetworkDevice(deviceMap.value("macAddress").toString(), deviceMap.value("interface").toString(), this);
|
||||||
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
device->setBitRate(deviceMap.value("bitRate").toString());
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
|
QMetaEnum modeEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessMode>();
|
||||||
|
device->setWirelessMode(static_cast<WirelessNetworkDevice::WirelessMode>(modeEnum.keyToValue(deviceMap.value("mode").toString().toUtf8())));
|
||||||
|
|
||||||
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
|
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
|
||||||
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
||||||
@ -236,7 +251,7 @@ void NetworkManager::getDevicesReply(const QVariantMap ¶ms)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::getAccessPointsReply(const QVariantMap ¶ms)
|
void NetworkManager::getAccessPointsResponse(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "Access points reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qDebug() << "Access points reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
|
||||||
@ -268,19 +283,44 @@ void NetworkManager::getAccessPointsReply(const QVariantMap ¶ms)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::connectToWiFiReply(const QVariantMap ¶ms)
|
void NetworkManager::connectToWiFiResponse(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "connect to wifi reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qDebug() << "connect to wifi reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
int id = params.value("id").toInt();
|
||||||
|
QString status = params.value("params").toMap().value("networkManagerError").toString();
|
||||||
|
emit connectToWiFiReply(id, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::disconnectReply(const QVariantMap ¶ms)
|
void NetworkManager::disconnectResponse(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "disconnect reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qDebug() << "disconnect reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
int id = params.value("id").toInt();
|
||||||
|
QString status = params.value("params").toMap().value("networkManagerError").toString();
|
||||||
|
emit disconnectReply(id, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::enableNetworkingReply(const QVariantMap ¶ms)
|
void NetworkManager::enableNetworkingResponse(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "enable networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qDebug() << "enable networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
int id = params.value("id").toInt();
|
||||||
|
QString status = params.value("params").toMap().value("networkManagerError").toString();
|
||||||
|
emit enableNetworkingReply(id, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkManager::enableWirelessNetworkingResponse(const QVariantMap ¶ms)
|
||||||
|
{
|
||||||
|
qDebug() << "enable wireless networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
int id = params.value("id").toInt();
|
||||||
|
QString status = params.value("params").toMap().value("networkManagerError").toString();
|
||||||
|
emit enableWirelessNetworkingReply(id, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkManager::startAccessPointResponse(const QVariantMap ¶ms)
|
||||||
|
{
|
||||||
|
qDebug() << "Start access point reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
int id = params.value("id").toInt();
|
||||||
|
QString status = params.value("params").toMap().value("networkManagerError").toString();
|
||||||
|
emit startAccessPointReply(id, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
||||||
@ -294,14 +334,30 @@ void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
device->setBitRate(deviceMap.value("bitRate").toString());
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
|
QMetaEnum modeEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessMode>();
|
||||||
|
device->setWirelessMode(static_cast<WirelessNetworkDevice::WirelessMode>(modeEnum.keyToValue(deviceMap.value("mode").toString().toUtf8())));
|
||||||
|
|
||||||
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
|
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
|
||||||
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
||||||
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
||||||
device->currentAccessPoint()->setProtected(currentApMap.value("protected").toBool());
|
device->currentAccessPoint()->setProtected(currentApMap.value("protected").toBool());
|
||||||
device->currentAccessPoint()->setSignalStrength(currentApMap.value("signalStrength").toInt());
|
device->currentAccessPoint()->setSignalStrength(currentApMap.value("signalStrength").toInt());
|
||||||
|
} else if (notification == "NetworkManager.WiredNetworkDeviceChanged") {
|
||||||
|
QVariantMap deviceMap = params.value("params").toMap().value("wiredNetworkDevice").toMap();
|
||||||
|
WiredNetworkDevice* device = m_wiredNetworkDevices->getWiredNetworkDevice(deviceMap.value("interface").toString());
|
||||||
|
if (!device) {
|
||||||
|
qWarning() << "Received a notification for a network device we don't know" << deviceMap;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
} else if (notification == "NetworkManager.NetworkStatusChanged") {
|
} else if (notification == "NetworkManager.NetworkStatusChanged") {
|
||||||
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkManager::NetworkManagerState>();
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkManager::NetworkManagerState>();
|
||||||
NetworkManagerState state = static_cast<NetworkManager::NetworkManagerState>(stateEnum.keyToValue(params.value("params").toMap().value("status").toMap().value("state").toString().toUtf8()));
|
NetworkManagerState state = static_cast<NetworkManager::NetworkManagerState>(stateEnum.keyToValue(params.value("params").toMap().value("status").toMap().value("state").toString().toUtf8()));
|
||||||
|
|||||||
@ -87,25 +87,14 @@ public:
|
|||||||
WiredNetworkDevices* wiredNetworkDevices() const;
|
WiredNetworkDevices* wiredNetworkDevices() const;
|
||||||
WirelessNetworkDevices* wirelessNetworkDevices() const;
|
WirelessNetworkDevices* wirelessNetworkDevices() const;
|
||||||
|
|
||||||
Q_INVOKABLE void enableNetworking(bool enable);
|
Q_INVOKABLE int enableNetworking(bool enable);
|
||||||
Q_INVOKABLE void enableWirelessNetworking(bool enable);
|
Q_INVOKABLE int enableWirelessNetworking(bool enable);
|
||||||
|
|
||||||
Q_INVOKABLE void refreshWifis(const QString &interface);
|
Q_INVOKABLE void refreshWifis(const QString &interface);
|
||||||
|
|
||||||
Q_INVOKABLE void connectToWiFi(const QString &interface, const QString &ssid, const QString &passphrase);
|
Q_INVOKABLE int connectToWiFi(const QString &interface, const QString &ssid, const QString &passphrase);
|
||||||
Q_INVOKABLE void disconnectInterface(const QString &interface);
|
Q_INVOKABLE int startAccessPoint(const QString &interface, const QString &ssid, const QString &passphrase);
|
||||||
|
Q_INVOKABLE int disconnectInterface(const QString &interface);
|
||||||
private slots:
|
|
||||||
void init();
|
|
||||||
|
|
||||||
void getStatusReply(const QVariantMap ¶ms);
|
|
||||||
void getDevicesReply(const QVariantMap ¶ms);
|
|
||||||
void getAccessPointsReply(const QVariantMap ¶ms);
|
|
||||||
void connectToWiFiReply(const QVariantMap ¶ms);
|
|
||||||
void disconnectReply(const QVariantMap ¶ms);
|
|
||||||
void enableNetworkingReply(const QVariantMap ¶ms);
|
|
||||||
|
|
||||||
void notificationReceived(const QVariantMap ¶ms);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void engineChanged();
|
void engineChanged();
|
||||||
@ -115,6 +104,26 @@ signals:
|
|||||||
void networkingEnabledChanged();
|
void networkingEnabledChanged();
|
||||||
void wirelessNetworkingEnabledChanged();
|
void wirelessNetworkingEnabledChanged();
|
||||||
|
|
||||||
|
void enableNetworkingReply(int id, const QString &status);
|
||||||
|
void enableWirelessNetworkingReply(int id, const QString &status);
|
||||||
|
void connectToWiFiReply(int id, const QString &status);
|
||||||
|
void disconnectReply(int id, const QString &status);
|
||||||
|
void startAccessPointReply(int id, const QString &status);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void init();
|
||||||
|
|
||||||
|
void getStatusResponse(const QVariantMap ¶ms);
|
||||||
|
void getDevicesResponse(const QVariantMap ¶ms);
|
||||||
|
void getAccessPointsResponse(const QVariantMap ¶ms);
|
||||||
|
void connectToWiFiResponse(const QVariantMap ¶ms);
|
||||||
|
void disconnectResponse(const QVariantMap ¶ms);
|
||||||
|
void enableNetworkingResponse(const QVariantMap ¶ms);
|
||||||
|
void enableWirelessNetworkingResponse(const QVariantMap ¶ms);
|
||||||
|
void startAccessPointResponse(const QVariantMap ¶ms);
|
||||||
|
|
||||||
|
void notificationReceived(const QVariantMap ¶ms);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Engine *m_engine = nullptr;
|
Engine *m_engine = nullptr;
|
||||||
bool m_loading = false;
|
bool m_loading = false;
|
||||||
|
|||||||
@ -85,7 +85,7 @@ Interfaces::Interfaces(QObject *parent) : QAbstractListModel(parent)
|
|||||||
addInterface("button", tr("Switches"));
|
addInterface("button", tr("Switches"));
|
||||||
addEventType("button", "pressed", tr("Button pressed"), new ParamTypes());
|
addEventType("button", "pressed", tr("Button pressed"), new ParamTypes());
|
||||||
|
|
||||||
addInterface("sensor", tr("Sensor"));
|
addInterface("sensor", tr("Sensors"));
|
||||||
|
|
||||||
addInterface("closablesensor", tr("Closable sensors"), {"sensor"});
|
addInterface("closablesensor", tr("Closable sensors"), {"sensor"});
|
||||||
addStateType("closablesensor", "closed", QVariant::Bool, false, tr("Closed"), tr("Opened or closed"));
|
addStateType("closablesensor", "closed", QVariant::Bool, false, tr("Closed"), tr("Opened or closed"));
|
||||||
|
|||||||
@ -46,11 +46,37 @@ QString NetworkDevice::macAddress() const
|
|||||||
return m_macAddress;
|
return m_macAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList NetworkDevice::ipv4Addresses() const
|
||||||
|
{
|
||||||
|
return m_ipv4Addresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList NetworkDevice::ipv6Addresses() const
|
||||||
|
{
|
||||||
|
return m_ipv6Addresses;
|
||||||
|
}
|
||||||
|
|
||||||
QString NetworkDevice::interface() const
|
QString NetworkDevice::interface() const
|
||||||
{
|
{
|
||||||
return m_interface;
|
return m_interface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkDevice::setIpv4Addresses(const QStringList &ipAddresses)
|
||||||
|
{
|
||||||
|
if (m_ipv4Addresses != ipAddresses) {
|
||||||
|
m_ipv4Addresses = ipAddresses;
|
||||||
|
emit ipv4AddressesChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkDevice::setIpv6Addresses(const QStringList &ipAddresses)
|
||||||
|
{
|
||||||
|
if (m_ipv6Addresses != ipAddresses) {
|
||||||
|
m_ipv6Addresses = ipAddresses;
|
||||||
|
emit ipv6AddressesChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString NetworkDevice::bitRate() const
|
QString NetworkDevice::bitRate() const
|
||||||
{
|
{
|
||||||
return m_bitRate;
|
return m_bitRate;
|
||||||
@ -103,6 +129,11 @@ WirelessNetworkDevice::WirelessNetworkDevice(const QString &macAddress, const QS
|
|||||||
m_currentAccessPoint = new WirelessAccessPoint(this);
|
m_currentAccessPoint = new WirelessAccessPoint(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const
|
||||||
|
{
|
||||||
|
return m_wirelessMode;
|
||||||
|
}
|
||||||
|
|
||||||
WirelessAccessPoints *WirelessNetworkDevice::accessPoints() const
|
WirelessAccessPoints *WirelessNetworkDevice::accessPoints() const
|
||||||
{
|
{
|
||||||
return m_accessPoints;
|
return m_accessPoints;
|
||||||
@ -112,3 +143,11 @@ WirelessAccessPoint *WirelessNetworkDevice::currentAccessPoint() const
|
|||||||
{
|
{
|
||||||
return m_currentAccessPoint;
|
return m_currentAccessPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WirelessNetworkDevice::setWirelessMode(WirelessNetworkDevice::WirelessMode wirelessMode)
|
||||||
|
{
|
||||||
|
if (m_wirelessMode != wirelessMode) {
|
||||||
|
m_wirelessMode = wirelessMode;
|
||||||
|
emit wirelessModeChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -40,6 +40,8 @@ class NetworkDevice : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(QString macAddress READ macAddress CONSTANT)
|
Q_PROPERTY(QString macAddress READ macAddress CONSTANT)
|
||||||
|
Q_PROPERTY(QStringList ipv4Addresses READ ipv4Addresses NOTIFY ipv4AddressesChanged)
|
||||||
|
Q_PROPERTY(QStringList ipv6Addresses READ ipv6Addresses NOTIFY ipv6AddressesChanged)
|
||||||
Q_PROPERTY(QString interface READ interface CONSTANT)
|
Q_PROPERTY(QString interface READ interface CONSTANT)
|
||||||
Q_PROPERTY(QString bitRate READ bitRate NOTIFY bitRateChanged)
|
Q_PROPERTY(QString bitRate READ bitRate NOTIFY bitRateChanged)
|
||||||
Q_PROPERTY(NetworkDeviceState state READ state NOTIFY stateChanged)
|
Q_PROPERTY(NetworkDeviceState state READ state NOTIFY stateChanged)
|
||||||
@ -65,8 +67,13 @@ public:
|
|||||||
explicit NetworkDevice(const QString &macAddress, const QString &interface, QObject *parent = nullptr);
|
explicit NetworkDevice(const QString &macAddress, const QString &interface, QObject *parent = nullptr);
|
||||||
virtual ~NetworkDevice() = default;
|
virtual ~NetworkDevice() = default;
|
||||||
|
|
||||||
QString macAddress() const;
|
|
||||||
QString interface() const;
|
QString interface() const;
|
||||||
|
QString macAddress() const;
|
||||||
|
QStringList ipv4Addresses() const;
|
||||||
|
QStringList ipv6Addresses() const;
|
||||||
|
|
||||||
|
void setIpv4Addresses(const QStringList &ipv4Addresses);
|
||||||
|
void setIpv6Addresses(const QStringList &ipv6Addresses);
|
||||||
|
|
||||||
QString bitRate() const;
|
QString bitRate() const;
|
||||||
void setBitRate(const QString &bitRate);
|
void setBitRate(const QString &bitRate);
|
||||||
@ -77,9 +84,13 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
void bitRateChanged();
|
void bitRateChanged();
|
||||||
void stateChanged();
|
void stateChanged();
|
||||||
|
void ipv4AddressesChanged();
|
||||||
|
void ipv6AddressesChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_macAddress;
|
QString m_macAddress;
|
||||||
|
QStringList m_ipv4Addresses;
|
||||||
|
QStringList m_ipv6Addresses;
|
||||||
QString m_interface;
|
QString m_interface;
|
||||||
QString m_bitRate;
|
QString m_bitRate;
|
||||||
NetworkDeviceState m_state;
|
NetworkDeviceState m_state;
|
||||||
@ -105,16 +116,31 @@ private:
|
|||||||
class WirelessNetworkDevice: public NetworkDevice
|
class WirelessNetworkDevice: public NetworkDevice
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(WirelessMode wirelessMode READ wirelessMode NOTIFY wirelessModeChanged)
|
||||||
Q_PROPERTY(WirelessAccessPoints* accessPoints READ accessPoints CONSTANT)
|
Q_PROPERTY(WirelessAccessPoints* accessPoints READ accessPoints CONSTANT)
|
||||||
Q_PROPERTY(WirelessAccessPoint* currentAccessPoint READ currentAccessPoint CONSTANT)
|
Q_PROPERTY(WirelessAccessPoint* currentAccessPoint READ currentAccessPoint CONSTANT)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum WirelessMode {
|
||||||
|
WirelessModeUnknown = 0,
|
||||||
|
WirelessModeAdhoc = 1,
|
||||||
|
WirelessModeInfrastructure = 2,
|
||||||
|
WirelessModeAccessPoint = 3
|
||||||
|
};
|
||||||
|
Q_ENUM(WirelessMode)
|
||||||
explicit WirelessNetworkDevice(const QString &macAddress, const QString &interface, QObject *parent = nullptr);
|
explicit WirelessNetworkDevice(const QString &macAddress, const QString &interface, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
WirelessMode wirelessMode() const;
|
||||||
WirelessAccessPoints* accessPoints() const;
|
WirelessAccessPoints* accessPoints() const;
|
||||||
WirelessAccessPoint* currentAccessPoint() const;
|
WirelessAccessPoint* currentAccessPoint() const;
|
||||||
|
|
||||||
|
void setWirelessMode(WirelessMode wirelessMode);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void wirelessModeChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
WirelessMode m_wirelessMode = WirelessModeUnknown;
|
||||||
WirelessAccessPoints *m_accessPoints = nullptr;
|
WirelessAccessPoints *m_accessPoints = nullptr;
|
||||||
WirelessAccessPoint *m_currentAccessPoint = nullptr;
|
WirelessAccessPoint *m_currentAccessPoint = nullptr;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -53,6 +53,10 @@ QVariant NetworkDevices::data(const QModelIndex &index, int role) const
|
|||||||
return m_list.at(index.row())->bitRate();
|
return m_list.at(index.row())->bitRate();
|
||||||
case RoleState:
|
case RoleState:
|
||||||
return m_list.at(index.row())->state();
|
return m_list.at(index.row())->state();
|
||||||
|
case RoleIpv4Addresses:
|
||||||
|
return m_list.at(index.row())->ipv4Addresses();
|
||||||
|
case RoleIpv6Addresses:
|
||||||
|
return m_list.at(index.row())->ipv6Addresses();
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
@ -64,6 +68,8 @@ QHash<int, QByteArray> NetworkDevices::roleNames() const
|
|||||||
roles.insert(RoleInterface, "interface");
|
roles.insert(RoleInterface, "interface");
|
||||||
roles.insert(RoleBitRate, "bitRate");
|
roles.insert(RoleBitRate, "bitRate");
|
||||||
roles.insert(RoleState, "state");
|
roles.insert(RoleState, "state");
|
||||||
|
roles.insert(RoleIpv4Addresses, "ipv4Addresses");
|
||||||
|
roles.insert(RoleIpv6Addresses, "ipv6Addresses");
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,13 +170,33 @@ QHash<int, QByteArray> WiredNetworkDevices::roleNames() const
|
|||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WiredNetworkDevice *WiredNetworkDevices::getWiredNetworkDevice(const QString &interface)
|
||||||
|
{
|
||||||
|
return dynamic_cast<WiredNetworkDevice*>(NetworkDevices::getNetworkDevice(interface));
|
||||||
|
}
|
||||||
|
|
||||||
WirelessNetworkDevices::WirelessNetworkDevices(QObject *parent):
|
WirelessNetworkDevices::WirelessNetworkDevices(QObject *parent):
|
||||||
NetworkDevices (parent)
|
NetworkDevices (parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QDebug>
|
QVariant WirelessNetworkDevices::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (role == RoleWirelessMode) {
|
||||||
|
WirelessNetworkDevice *dev = qobject_cast<WirelessNetworkDevice*>(m_list.at(index.row()));
|
||||||
|
return dev->wirelessMode();
|
||||||
|
}
|
||||||
|
return NetworkDevices::data(index, role);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QHash<int, QByteArray> WirelessNetworkDevices::roleNames() const
|
||||||
|
{
|
||||||
|
QHash<int, QByteArray> roles = NetworkDevices::roleNames();
|
||||||
|
roles.insert(RoleWirelessMode, "wirelessMode");
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
WirelessNetworkDevice *WirelessNetworkDevices::getWirelessNetworkDevice(const QString &interface)
|
WirelessNetworkDevice *WirelessNetworkDevices::getWirelessNetworkDevice(const QString &interface)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -47,6 +47,8 @@ public:
|
|||||||
RoleInterface,
|
RoleInterface,
|
||||||
RoleBitRate,
|
RoleBitRate,
|
||||||
RoleState,
|
RoleState,
|
||||||
|
RoleIpv4Addresses,
|
||||||
|
RoleIpv6Addresses
|
||||||
};
|
};
|
||||||
Q_ENUM(Roles)
|
Q_ENUM(Roles)
|
||||||
|
|
||||||
@ -82,18 +84,26 @@ public:
|
|||||||
|
|
||||||
explicit WiredNetworkDevices(QObject *parent = nullptr);
|
explicit WiredNetworkDevices(QObject *parent = nullptr);
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
void addNetworkDevice(NetworkDevice *device) override;
|
void addNetworkDevice(NetworkDevice *device) override;
|
||||||
|
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
Q_INVOKABLE WiredNetworkDevice* getWiredNetworkDevice(const QString &interface);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class WirelessNetworkDevices: public NetworkDevices
|
class WirelessNetworkDevices: public NetworkDevices
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
enum Roles {
|
||||||
|
RoleWirelessMode = 1000
|
||||||
|
};
|
||||||
explicit WirelessNetworkDevices(QObject *parent = nullptr);
|
explicit WirelessNetworkDevices(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
Q_INVOKABLE WirelessNetworkDevice* getWirelessNetworkDevice(const QString &interface);
|
Q_INVOKABLE WirelessNetworkDevice* getWirelessNetworkDevice(const QString &interface);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -71,7 +71,7 @@ ColumnLayout {
|
|||||||
id: passwordTextField
|
id: passwordTextField
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
echoMode: root.hiddenPassword ? TextInput.Password : TextInput.Normal
|
echoMode: root.hiddenPassword ? TextInput.Password : TextInput.Normal
|
||||||
placeholderText: root.signup ? qsTr("Pick a password") : ""
|
placeholderText: root.signup ? qsTr("Pick a password") : qsTr("Password")
|
||||||
|
|
||||||
ToolTip.visible: root.signup && focus && !root.isValidPassword
|
ToolTip.visible: root.signup && focus && !root.isValidPassword
|
||||||
ToolTip.delay: 1000
|
ToolTip.delay: 1000
|
||||||
|
|||||||
@ -38,14 +38,64 @@ import "../components"
|
|||||||
SettingsPageBase {
|
SettingsPageBase {
|
||||||
id: root
|
id: root
|
||||||
title: qsTr("Network settings")
|
title: qsTr("Network settings")
|
||||||
busy: networkManager.loading
|
busy: networkManager.loading || d.pendingCallId !== -1
|
||||||
|
|
||||||
NetworkManager {
|
NetworkManager {
|
||||||
id: networkManager
|
id: networkManager
|
||||||
engine: _engine
|
engine: _engine
|
||||||
|
onEnableNetworkingReply: handleReply(id, status)
|
||||||
|
onEnableWirelessNetworkingReply: handleReply(id, status)
|
||||||
|
onConnectToWiFiReply: handleReply(id, status)
|
||||||
|
onStartAccessPointReply: handleReply(id, status)
|
||||||
|
onDisconnectReply: handleReply(id, status)
|
||||||
|
|
||||||
|
function handleReply(id, status) {
|
||||||
|
if (id === d.pendingCallId) {
|
||||||
|
d.pendingCallId = -1
|
||||||
|
}
|
||||||
|
var errorMessage;
|
||||||
|
switch (status) {
|
||||||
|
case "NetworkManagerErrorNoError":
|
||||||
|
return;
|
||||||
|
case "NetworkManagerErrorWirelessNotAvailable":
|
||||||
|
errorMessage = qsTr("No wireless hardware available.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorAccessPointNotFound":
|
||||||
|
errorMessage = qsTr("The access point cannot be found.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorNetworkInterfaceNotFound":
|
||||||
|
errorMessage = qsTr("The network interface cannot be found.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorInvalidNetworkDeviceType":
|
||||||
|
errorMessage = qsTr("Invalid network device type.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorWirelessNetworkingDisabled":
|
||||||
|
errorMessage = qsTr("Wireless networking is disabled.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorWirelessConnectionFailed":
|
||||||
|
errorMessage = qsTr("The wireless connection failed.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorNetworkingDisabled":
|
||||||
|
errorMessage = qsTr("Networking is disabled.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorNetworkManagerNotAvailable":
|
||||||
|
errorMessage = qsTr("The network manager is not available.")
|
||||||
|
break;
|
||||||
|
case "NetworkManagerErrorUnknownError":
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
var component = Qt.createComponent(Qt.resolvedUrl("../components/ErrorDialog.qml"))
|
||||||
|
var popup = component.createObject(root, {text: errorMessage, errorCode: stats})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function networkStateToString(networkState) {
|
QtObject {
|
||||||
|
id: d
|
||||||
|
property int pendingCallId: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
function networkStateToString(networkState, mode) {
|
||||||
switch (networkState) {
|
switch (networkState) {
|
||||||
case NetworkDevice.NetworkDeviceStateUnknown:
|
case NetworkDevice.NetworkDeviceStateUnknown:
|
||||||
return qsTr("Unknown")
|
return qsTr("Unknown")
|
||||||
@ -72,13 +122,17 @@ SettingsPageBase {
|
|||||||
case NetworkDevice.NetworkDeviceStateSecondaries:
|
case NetworkDevice.NetworkDeviceStateSecondaries:
|
||||||
return qsTr("Secondaries")
|
return qsTr("Secondaries")
|
||||||
case NetworkDevice.NetworkDeviceStateActivated:
|
case NetworkDevice.NetworkDeviceStateActivated:
|
||||||
return qsTr("Connected");
|
if (mode === WirelessNetworkDevice.WirelessModeAccessPoint) {
|
||||||
|
return qsTr("Hosting access point");
|
||||||
|
} else {
|
||||||
|
return qsTr("Connected");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
Layout.topMargin: app.margins * 6
|
Layout.topMargin: app.margins * 6
|
||||||
visible: !networkManager.available
|
visible: !networkManager.available && !networkManager.loading
|
||||||
spacing: app.margins
|
spacing: app.margins
|
||||||
ColorIcon {
|
ColorIcon {
|
||||||
Layout.preferredHeight: app.iconSize
|
Layout.preferredHeight: app.iconSize
|
||||||
@ -172,13 +226,13 @@ SettingsPageBase {
|
|||||||
});
|
});
|
||||||
popup.open();
|
popup.open();
|
||||||
popup.accepted.connect(function() {
|
popup.accepted.connect(function() {
|
||||||
networkManager.enableNetworking(false);
|
d.pendingCallId = networkManager.enableNetworking(false);
|
||||||
})
|
})
|
||||||
popup.rejected.connect(function() {
|
popup.rejected.connect(function() {
|
||||||
checked = true;
|
checked = true;
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
networkManager.enableNetworking(true);
|
d.pendingCallId = networkManager.enableNetworking(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,7 +240,7 @@ SettingsPageBase {
|
|||||||
|
|
||||||
SettingsPageSectionHeader {
|
SettingsPageSectionHeader {
|
||||||
text: qsTr("Wired network")
|
text: qsTr("Wired network")
|
||||||
visible: networkManager.available
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
@ -195,7 +249,7 @@ SettingsPageBase {
|
|||||||
Layout.rightMargin: app.margins
|
Layout.rightMargin: app.margins
|
||||||
text: qsTr("No wired network interfaces available")
|
text: qsTr("No wired network interfaces available")
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
visible: networkManager.available && networkManager.wiredNetworkDevices.count == 0
|
visible: networkManager.available && networkManager.networkingEnabled && networkManager.wiredNetworkDevices.count == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
@ -205,7 +259,7 @@ SettingsPageBase {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
iconName: model.pluggedIn ? "../images/network-wired.svg" : "../images/network-wired-offline.svg"
|
iconName: model.pluggedIn ? "../images/network-wired.svg" : "../images/network-wired-offline.svg"
|
||||||
text: model.interface + " (" + model.macAddress + ")"
|
text: model.interface + " (" + model.macAddress + ")"
|
||||||
visible: networkManager.available
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
subText: {
|
subText: {
|
||||||
var ret = model.pluggedIn ? qsTr("Plugged in") : qsTr("Unplugged")
|
var ret = model.pluggedIn ? qsTr("Plugged in") : qsTr("Unplugged")
|
||||||
ret += " - "
|
ret += " - "
|
||||||
@ -218,7 +272,7 @@ SettingsPageBase {
|
|||||||
|
|
||||||
SettingsPageSectionHeader {
|
SettingsPageSectionHeader {
|
||||||
text: qsTr("Wireless network")
|
text: qsTr("Wireless network")
|
||||||
visible: networkManager.available
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
NymeaListItemDelegate {
|
NymeaListItemDelegate {
|
||||||
@ -227,10 +281,11 @@ SettingsPageBase {
|
|||||||
subText: qsTr("Enable or disable WiFi")
|
subText: qsTr("Enable or disable WiFi")
|
||||||
progressive: false
|
progressive: false
|
||||||
prominentSubText: false
|
prominentSubText: false
|
||||||
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
additionalItem: Switch {
|
additionalItem: Switch {
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
checked: networkManager.wirelessNetworkingEnabled
|
checked: networkManager.wirelessNetworkingEnabled
|
||||||
visible: networkManager.available
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (!checked) {
|
if (!checked) {
|
||||||
var dialog = Qt.createComponent(Qt.resolvedUrl("../components/MeaDialog.qml"));
|
var dialog = Qt.createComponent(Qt.resolvedUrl("../components/MeaDialog.qml"));
|
||||||
@ -246,13 +301,13 @@ SettingsPageBase {
|
|||||||
});
|
});
|
||||||
popup.open();
|
popup.open();
|
||||||
popup.accepted.connect(function() {
|
popup.accepted.connect(function() {
|
||||||
networkManager.enableWirelessNetworking(false);
|
d.pendingCallId = networkManager.enableWirelessNetworking(false);
|
||||||
})
|
})
|
||||||
popup.rejected.connect(function() {
|
popup.rejected.connect(function() {
|
||||||
checked = true;
|
checked = true;
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
networkManager.enableWirelessNetworking(true);
|
d.pendingCallId = networkManager.enableWirelessNetworking(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -264,14 +319,14 @@ SettingsPageBase {
|
|||||||
Layout.rightMargin: app.margins
|
Layout.rightMargin: app.margins
|
||||||
text: qsTr("No wired network interfaces available")
|
text: qsTr("No wired network interfaces available")
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
visible: networkManager.available &&networkManager.wirelessNetworkDevices.count == 0
|
visible: networkManager.available && networkManager.wirelessNetworkDevices.count == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: networkManager.wirelessNetworkDevices
|
model: networkManager.wirelessNetworkDevices
|
||||||
visible: networkManager.available
|
|
||||||
NymeaListItemDelegate {
|
NymeaListItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
iconName: {
|
iconName: {
|
||||||
switch (model.state) {
|
switch (model.state) {
|
||||||
case NetworkDevice.NetworkDeviceStateUnknown:
|
case NetworkDevice.NetworkDeviceStateUnknown:
|
||||||
@ -300,8 +355,9 @@ SettingsPageBase {
|
|||||||
console.warn("Unhandled enum", model.state)
|
console.warn("Unhandled enum", model.state)
|
||||||
}
|
}
|
||||||
text: model.interface + " (" + model.macAddress + ")"
|
text: model.interface + " (" + model.macAddress + ")"
|
||||||
subText: networkStateToString(model.state)
|
subText: networkStateToString(model.state, model.wirelessMode)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
print("*** --", model.wirelessMode)
|
||||||
var wirelessNetworkDevice = networkManager.wirelessNetworkDevices.getWirelessNetworkDevice(model.interface);
|
var wirelessNetworkDevice = networkManager.wirelessNetworkDevices.getWirelessNetworkDevice(model.interface);
|
||||||
if (wirelessNetworkDevice.state === NetworkDevice.NetworkDeviceStateDisconnected) {
|
if (wirelessNetworkDevice.state === NetworkDevice.NetworkDeviceStateDisconnected) {
|
||||||
networkManager.refreshWifis(model.interface)
|
networkManager.refreshWifis(model.interface)
|
||||||
@ -319,13 +375,56 @@ SettingsPageBase {
|
|||||||
id: wirelessAccessPointsPage
|
id: wirelessAccessPointsPage
|
||||||
title: qsTr("WiFi networks")
|
title: qsTr("WiFi networks")
|
||||||
|
|
||||||
property var wirelessNetworkDevice: null
|
property WirelessNetworkDevice wirelessNetworkDevice: null
|
||||||
|
|
||||||
WirelessAccessPointsProxy {
|
WirelessAccessPointsProxy {
|
||||||
id: apProxy
|
id: apProxy
|
||||||
accessPoints: wirelessAccessPointsPage.wirelessNetworkDevice.accessPoints
|
accessPoints: wirelessAccessPointsPage.wirelessNetworkDevice.accessPoints
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingsPageSectionHeader {
|
||||||
|
text: qsTr("Access Point")
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField {
|
||||||
|
id: ssidTextField
|
||||||
|
Layout.fillWidth: true
|
||||||
|
maximumLength: 32
|
||||||
|
Layout.leftMargin: app.margins
|
||||||
|
Layout.rightMargin: app.margins
|
||||||
|
placeholderText: qsTr("SSID")
|
||||||
|
}
|
||||||
|
|
||||||
|
PasswordTextField {
|
||||||
|
id: passwordTextField
|
||||||
|
Layout.fillWidth: true
|
||||||
|
minPasswordLength: 8
|
||||||
|
Layout.leftMargin: app.margins
|
||||||
|
Layout.rightMargin: app.margins
|
||||||
|
requireLowerCaseLetter: false
|
||||||
|
requireUpperCaseLetter: false
|
||||||
|
requireNumber: false
|
||||||
|
requireSpecialChar: false
|
||||||
|
signup: false
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.margins: app.margins
|
||||||
|
Layout.leftMargin: app.margins
|
||||||
|
Layout.rightMargin: app.margins
|
||||||
|
text: qsTr("Create Access Point")
|
||||||
|
enabled: ssidTextField.displayText.length > 0 && passwordTextField.isValidPassword
|
||||||
|
onClicked: {
|
||||||
|
d.pendingCallId = networkManager.startAccessPoint(wirelessAccessPointsPage.wirelessNetworkDevice.interface, ssidTextField.text, passwordTextField.password)
|
||||||
|
pageStack.pop(root);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsPageSectionHeader {
|
||||||
|
text: qsTr("Connect to wireless network")
|
||||||
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
id: listView
|
id: listView
|
||||||
model: apProxy
|
model: apProxy
|
||||||
@ -333,6 +432,7 @@ SettingsPageBase {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: model.ssid !== "" ? model.ssid : qsTr("Hidden Network")
|
text: model.ssid !== "" ? model.ssid : qsTr("Hidden Network")
|
||||||
subText: "%1 (%2)".arg(model.macAddress).arg(model.frequency < 3 ? "2.4GHz" : "5GHz")
|
subText: "%1 (%2)".arg(model.macAddress).arg(model.frequency < 3 ? "2.4GHz" : "5GHz")
|
||||||
|
prominentSubText: false
|
||||||
iconName: {
|
iconName: {
|
||||||
var ret = "../images/nm-signal-";
|
var ret = "../images/nm-signal-";
|
||||||
if (model.signalStrength > 90) {
|
if (model.signalStrength > 90) {
|
||||||
@ -353,8 +453,6 @@ SettingsPageBase {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
progressive: false
|
|
||||||
prominentSubText: false
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
print("pushing", wirelessAccessPointsPage.wirelessNetworkDevice.state)
|
print("pushing", wirelessAccessPointsPage.wirelessNetworkDevice.state)
|
||||||
pageStack.push(authPageComponent, {wirelessNetworkDevice: wirelessAccessPointsPage.wirelessNetworkDevice, wirelessAccessPoint: apProxy.get(index)})
|
pageStack.push(authPageComponent, {wirelessNetworkDevice: wirelessAccessPointsPage.wirelessNetworkDevice, wirelessAccessPoint: apProxy.get(index)})
|
||||||
@ -407,7 +505,7 @@ SettingsPageBase {
|
|||||||
text: qsTr("OK")
|
text: qsTr("OK")
|
||||||
enabled: passwordTextField.displayText.length >= 8
|
enabled: passwordTextField.displayText.length >= 8
|
||||||
onClicked: {
|
onClicked: {
|
||||||
networkManager.connectToWiFi(authPage.wirelessNetworkDevice.interface, authPage.wirelessAccessPoint.ssid, passwordTextField.text)
|
d.pendingCallId = networkManager.connectToWiFi(authPage.wirelessNetworkDevice.interface, authPage.wirelessAccessPoint.ssid, passwordTextField.text)
|
||||||
pageStack.pop(root);
|
pageStack.pop(root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -423,6 +521,9 @@ SettingsPageBase {
|
|||||||
|
|
||||||
property WirelessNetworkDevice wirelessNetworkDevice: null
|
property WirelessNetworkDevice wirelessNetworkDevice: null
|
||||||
|
|
||||||
|
SettingsPageSectionHeader {
|
||||||
|
text: wirelessNetworkDevice.wirelessMode === WirelessNetworkDevice.WirelessModeAccessPoint ? qsTr("Hosting access point") : qsTr("Connected to")
|
||||||
|
}
|
||||||
|
|
||||||
NymeaListItemDelegate {
|
NymeaListItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@ -430,6 +531,20 @@ SettingsPageBase {
|
|||||||
subText: currentApPage.wirelessNetworkDevice.currentAccessPoint.ssid
|
subText: currentApPage.wirelessNetworkDevice.currentAccessPoint.ssid
|
||||||
progressive: false
|
progressive: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NymeaListItemDelegate {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("IPv4 Address")
|
||||||
|
subText: currentApPage.wirelessNetworkDevice.ipv4Addresses.join(", ")
|
||||||
|
progressive: false
|
||||||
|
}
|
||||||
|
NymeaListItemDelegate {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("IPv6 Address")
|
||||||
|
subText: currentApPage.wirelessNetworkDevice.ipv6Addresses.join(", ")
|
||||||
|
visible: subText.length > 0
|
||||||
|
progressive: false
|
||||||
|
}
|
||||||
NymeaListItemDelegate {
|
NymeaListItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: qsTr("MAC Address")
|
text: qsTr("MAC Address")
|
||||||
@ -454,7 +569,7 @@ SettingsPageBase {
|
|||||||
Layout.margins: app.margins
|
Layout.margins: app.margins
|
||||||
text: qsTr("Disconnect")
|
text: qsTr("Disconnect")
|
||||||
onClicked: {
|
onClicked: {
|
||||||
networkManager.disconnectInterface(currentApPage.wirelessNetworkDevice.interface)
|
d.pendingCallId = networkManager.disconnectInterface(currentApPage.wirelessNetworkDevice.interface)
|
||||||
pageStack.pop(root);
|
pageStack.pop(root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user