Index: sources/view/settings/VNetworkModel.cpp =================================================================== diff -u -r1c18f738693756ca1f0342c2cc158e32bc28f90b -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 --- sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision 1c18f738693756ca1f0342c2cc158e32bc28f90b) +++ sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) @@ -1,5 +1,20 @@ +/*! + * + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VNetworkModel.cpp + * \author (last) Behrouz NematiPour + * \date (last) 08-Dec-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-May-2021 + * + */ // Qt +#include // Project #include "VNetworkModel.h" @@ -9,7 +24,9 @@ using namespace View; VNetworkModel::VNetworkModel(QAbstractListModel *parent) : QAbstractListModel(parent) { + startTimer(_interval); initConnections(); + _devWlan = WifiInterface::iface(); } /*! @@ -75,8 +92,6 @@ connect(this, SIGNAL(didRequestSetDNS (const QString &)), &_WifiInterface, SLOT( doRequestSetDNS (const QString &))); - - } /*! @@ -152,6 +167,14 @@ return network.status(); case SignalLevelRole: return network.signalLevel(); + case NetworkSupportedRole: { + bool isSecurityTypeSupported = (!network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WEP) && + !network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP) && + !network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP_AES) && + !network.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::UNSUPPORTED)); + bool isPasswordProtected = network.requirePassword(); + return isSecurityTypeSupported && isPasswordProtected; + } } return QVariant(); @@ -169,6 +192,7 @@ roles[SecurityTypesRole] = "securityTypes"; roles[StatusRole] = "status"; roles[SignalLevelRole] = "signalLevel"; + roles[NetworkSupportedRole] = "isNetworkSupported"; return roles; } @@ -349,6 +373,16 @@ } /*! + * \brief VNetworkModel::timerEvent + * \details The overloaded parent QObject timer event handler function + */ +void VNetworkModel::timerEvent(QTimerEvent *) +{ + checkEthernet(); + checkWireless(); +} + +/*! * \brief VNetworkModel::clearWifiSettings * Clears the selected network settings */ @@ -363,6 +397,53 @@ } /*! + * \brief VNetworkModel::checkEthernet + * \details check for Ethernet using VNetworkModel::checkDevNet + */ +void VNetworkModel::checkEthernet() +{ + const QNetworkInterface dev = QNetworkInterface::interfaceFromName(_devEth); + QString devIP = tr("No Ethernet"); + + // The QNetworkInterface object can be valid, but not running+up. + // Check the object's flags to determine running+up state. + bool eth0IsUp = dev.flags().testFlag(QNetworkInterface::IsUp ); + bool eth0IsRunning = dev.flags().testFlag(QNetworkInterface::IsRunning); + + if ( dev.isValid() && (eth0IsUp && eth0IsRunning)) { + auto addresses = dev.addressEntries(); + if ( addresses.count() ) { + devIP = addresses.first().ip().toString(); + } + } + _ethernetIP = devIP; + emit ethernetIPChanged( _ethernetIP ); +} + +/*! + * \brief VNetworkModel::checkWireless + * \details check for Ethernet using VNetworkModel::checkDevNet + */ +void VNetworkModel::checkWireless() +{ + const QNetworkInterface dev = QNetworkInterface::interfaceFromName(_devWlan); + QString devIP = tr("No WiFi"); + if ( dev.isValid() ) { + auto addresses = dev.addressEntries(); + if ( addresses.count() ) { + if ( dev.flags().testFlag(QNetworkInterface::IsUp) && dev.flags().testFlag(QNetworkInterface::IsRunning) ) { + devIP = addresses.first().ip().toString(); + } + else { + devIP = tr("WiFi Disconnect"); + } + } + } + _wirelessIP = devIP; + emit wirelessIPChanged( _wirelessIP ); +} + +/*! * \brief VNetworkModel::onSetIPAddressSuccess * Called when the IP address has been set */