From e00530e0987a2b4da4e5c163dca3720053720444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 10 Jan 2019 20:46:43 +0100 Subject: [PATCH] Fix #8 by giving networkmanager some time to initialize --- nymea-networkmanager/core.cpp | 59 +++++++++++++++++++++-------------- nymea-networkmanager/core.h | 3 ++ 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/nymea-networkmanager/core.cpp b/nymea-networkmanager/core.cpp index 7953da1..30e1e33 100644 --- a/nymea-networkmanager/core.cpp +++ b/nymea-networkmanager/core.cpp @@ -105,29 +105,8 @@ void Core::run() return; } - switch (m_mode) { - case ModeAlways: - qCDebug(dcApplication()) << "Start the bluetooth service because of \"always\" mode."; - startService(); - break; - case ModeStart: - qCDebug(dcApplication()) << "Start the bluetooth service because of \"start\" mode."; - startService(); - m_advertisingTimer->start(m_advertisingTimeout * 1000); - break; - case ModeOffline: - evaluateNetworkManagerState(m_networkManager->state()); - break; - case ModeOnce: - if (m_networkManager->networkSettings()->connections().isEmpty()) { - qCDebug(dcApplication()) << "Start the bluetooth service because of \"once\" mode and there is currenlty no network configured yet."; - startService(); - } else { - qCDebug(dcApplication()) << "Not starting the bluetooth service because of \"once\" mode. There are" << m_networkManager->networkSettings()->connections().count() << "network configurations."; - } - break; - } - + // Note: give network-manager more time to start and get online status + QTimer::singleShot(5000, this, &Core::postRun); } Core::Core(QObject *parent) : @@ -243,6 +222,35 @@ void Core::stopService() } } +void Core::postRun() +{ + qCDebug(dcApplication()) << "Post run service"; + m_initRunning = false; + + switch (m_mode) { + case ModeAlways: + qCDebug(dcApplication()) << "Start the bluetooth service because of \"always\" mode."; + startService(); + break; + case ModeStart: + qCDebug(dcApplication()) << "Start the bluetooth service because of \"start\" mode."; + startService(); + m_advertisingTimer->start(m_advertisingTimeout * 1000); + break; + case ModeOffline: + evaluateNetworkManagerState(m_networkManager->state()); + break; + case ModeOnce: + if (m_networkManager->networkSettings()->connections().isEmpty()) { + qCDebug(dcApplication()) << "Start the bluetooth service because of \"once\" mode and there is currenlty no network configured yet."; + startService(); + } else { + qCDebug(dcApplication()) << "Not starting the bluetooth service because of \"once\" mode. There are" << m_networkManager->networkSettings()->connections().count() << "network configurations."; + } + break; + } +} + void Core::onAdvertisingTimeout() { if (m_mode != ModeStart) @@ -313,6 +321,11 @@ void Core::onNetworkManagerAvailableChanged(const bool &available) return; } + if (m_initRunning) { + qCDebug(dcApplication()) << "Init is running"; + return; + } + qCDebug(dcApplication()) << "Networkmanager is now available."; m_bluetoothServer->onNetworkManagerAvailableChanged(available); diff --git a/nymea-networkmanager/core.h b/nymea-networkmanager/core.h index 02591ec..e082976 100644 --- a/nymea-networkmanager/core.h +++ b/nymea-networkmanager/core.h @@ -79,6 +79,7 @@ private: QString m_advertiseName; QString m_platformName; int m_advertisingTimeout = 60; + bool m_initRunning = true; void evaluateNetworkManagerState(const NetworkManager::NetworkManagerState &state); @@ -86,6 +87,8 @@ private: void stopService(); private slots: + void postRun(); + void onAdvertisingTimeout(); void onBluetoothServerRunningChanged(bool running);