Reinitialize if the initial properties cannot be loaded during start of networkmanager

pull/5/head
Simon Stürz 2020-01-23 09:26:43 +01:00
parent 87a039fcde
commit 43f64af331
2 changed files with 21 additions and 8 deletions

View File

@ -35,6 +35,7 @@
#include <QUuid>
#include <QDebug>
#include <QTimer>
#include <QMetaEnum>
/*! Constructs a new \l{NetworkManager} object with the given \a parent. */
@ -281,8 +282,6 @@ NetworkManager::NetworkManagerError NetworkManager::startAccessPoint(const QStri
qCDebug(dcNetworkManager()) << "Connection added" << connectionObjectPath.path();
//
// Activate connection
QDBusMessage query = m_networkManagerInterface->call("ActivateConnection",
QVariant::fromValue(connectionObjectPath),
@ -360,24 +359,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)));
@ -385,6 +390,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...";
@ -427,6 +438,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

@ -74,6 +74,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();