Merge PR #5: Reinitialize nm if the initial properties cannot be loaded during start

This commit is contained in:
Jenkins nymea 2020-02-23 23:38:16 +01:00
commit 473e71a3f0
2 changed files with 21 additions and 8 deletions

View File

@ -43,6 +43,7 @@
#include <QUuid>
#include <QDebug>
#include <QTimer>
#include <QMetaEnum>
/*! Constructs a new \l{NetworkManager} object with the given \a parent. */
@ -289,8 +290,6 @@ NetworkManager::NetworkManagerError NetworkManager::startAccessPoint(const QStri
qCDebug(dcNetworkManager()) << "Connection added" << connectionObjectPath.path();
//
// Activate connection
QDBusMessage query = m_networkManagerInterface->call("ActivateConnection",
QVariant::fromValue(connectionObjectPath),
@ -368,24 +367,30 @@ bool NetworkManager::init()
m_networkManagerInterface = new QDBusInterface(NetworkManagerUtils::networkManagerServiceString(), NetworkManagerUtils::networkManagerPathString(), NetworkManagerUtils::networkManagerServiceString(), QDBusConnection::systemBus(), this);
if(!m_networkManagerInterface->isValid()) {
qCWarning(dcNetworkManager()) << "Invalid DBus network manager interface. NetworkManagre not available.";
m_networkManagerInterface->deleteLater();
delete m_networkManagerInterface;
m_networkManagerInterface = nullptr;
setAvailable(false);
return false;
}
qCDebug(dcNetworkManager()) << "DBus interface created successfully" << NetworkManagerUtils::networkManagerPathString();
// Init properties
qCDebug(dcNetworkManager()) << "Read initial properties...";
setVersion(m_networkManagerInterface->property("Version").toString());
setState(static_cast<NetworkManagerState>(m_networkManagerInterface->property("State").toUInt()));
setConnectivityState(static_cast<NetworkManagerConnectivityState>(m_networkManagerInterface->property("Connectivity").toUInt()));
setNetworkingEnabled(m_networkManagerInterface->property("NetworkingEnabled").toBool());
setWirelessEnabled(m_networkManagerInterface->property("WirelessEnabled").toBool());
// Load network devices
loadDevices();
// Create settings
m_networkSettings = new NetworkSettings(this);
if (m_version.isEmpty()) {
qCWarning(dcNetworkManager()) << "Could not read initial properties. The networkmanager might not be initialized yet. Reinitialize in 2 seconds...";
delete m_networkManagerInterface;
m_networkManagerInterface = nullptr;
setAvailable(false);
QTimer::singleShot(2000, this, &NetworkManager::init);
return false;
}
// Connect signals
QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), NetworkManagerUtils::networkManagerPathString(), NetworkManagerUtils::networkManagerServiceString(), "StateChanged", this, SLOT(onStateChanged(uint)));
@ -393,6 +398,12 @@ bool NetworkManager::init()
QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), NetworkManagerUtils::networkManagerPathString(), NetworkManagerUtils::networkManagerServiceString(), "DeviceRemoved", this, SLOT(onDeviceRemoved(QDBusObjectPath)));
QDBusConnection::systemBus().connect(NetworkManagerUtils::networkManagerServiceString(), NetworkManagerUtils::networkManagerPathString(), NetworkManagerUtils::networkManagerServiceString(), "PropertiesChanged", this, SLOT(onPropertiesChanged(QVariantMap)));
// Load network devices
loadDevices();
// Create settings
m_networkSettings = new NetworkSettings(this);
setAvailable(true);
qCDebug(dcNetworkManager()) << "Network manager initialized successfully.";
qCDebug(dcNetworkManager()) << "Start initial wireless network scan...";
@ -435,6 +446,7 @@ void NetworkManager::deinit()
void NetworkManager::loadDevices()
{
// Get network devices
qCDebug(dcNetworkManager()) << "Get available devices";
QDBusMessage query = m_networkManagerInterface->call("GetDevices");
if(query.type() != QDBusMessage::ReplyMessage) {
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();

View File

@ -82,6 +82,7 @@ QList<NetworkConnection *> NetworkSettings::connections() const
void NetworkSettings::loadConnections()
{
qCDebug(dcNetworkManager()) << "Load connection list";
QDBusMessage query = m_settingsInterface->call("ListConnections");
if(query.type() != QDBusMessage::ReplyMessage) {
qCWarning(dcNetworkManager()) << query.errorName() << query.errorMessage();