diff --git a/libnymea-networkmanager/networkmanager.cpp b/libnymea-networkmanager/networkmanager.cpp index e4fc415..d3f6e66 100644 --- a/libnymea-networkmanager/networkmanager.cpp +++ b/libnymea-networkmanager/networkmanager.cpp @@ -35,6 +35,7 @@ #include #include +#include #include /*! 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(m_networkManagerInterface->property("State").toUInt())); setConnectivityState(static_cast(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(); diff --git a/libnymea-networkmanager/networksettings.cpp b/libnymea-networkmanager/networksettings.cpp index 5e5c140..3f4c771 100644 --- a/libnymea-networkmanager/networksettings.cpp +++ b/libnymea-networkmanager/networksettings.cpp @@ -74,6 +74,7 @@ QList 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();