From a0371a01331a07c08630fedb3e76767ce386f479 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 11 Oct 2017 17:04:59 +0200 Subject: [PATCH] add a config option for enabling/disabling the cloud --- libguh-core/awsconnector.cpp | 1 - libguh-core/awsconnector.h | 1 - libguh-core/cloudmanager.cpp | 3 +++ libguh-core/guhconfiguration.cpp | 18 +++++++++++++ libguh-core/guhconfiguration.h | 4 +++ libguh-core/guhcore.cpp | 5 ++-- libguh-core/jsonrpc/configurationhandler.cpp | 27 ++++++++++++++++++++ libguh-core/jsonrpc/configurationhandler.h | 2 ++ 8 files changed, 56 insertions(+), 5 deletions(-) diff --git a/libguh-core/awsconnector.cpp b/libguh-core/awsconnector.cpp index 3234e21d..a87ae7c5 100644 --- a/libguh-core/awsconnector.cpp +++ b/libguh-core/awsconnector.cpp @@ -185,7 +185,6 @@ void AWSConnector::onPairingsRetrieved(const QVariantList &pairings) void AWSConnector::disconnectAWS() { - m_reconnect = false; if (isConnected()) { m_client->Disconnect(std::chrono::seconds(2)); } diff --git a/libguh-core/awsconnector.h b/libguh-core/awsconnector.h index b56e3a6d..461444a3 100644 --- a/libguh-core/awsconnector.h +++ b/libguh-core/awsconnector.h @@ -91,7 +91,6 @@ private: private: std::shared_ptr m_networkConnection; std::shared_ptr m_client; - bool m_reconnect = false; QString m_currentEndpoint; QString m_caFile; QString m_clientCertFile; diff --git a/libguh-core/cloudmanager.cpp b/libguh-core/cloudmanager.cpp index e58150e7..a7b04941 100644 --- a/libguh-core/cloudmanager.cpp +++ b/libguh-core/cloudmanager.cpp @@ -105,6 +105,9 @@ void CloudManager::setEnabled(bool enabled) if (!m_awsConnector->isConnected() && m_networkManager->state() == NetworkManager::NetworkManagerStateConnectedGlobal) { connect2aws(); } + } else { + m_enabled = false; + m_awsConnector->disconnectAWS(); } } diff --git a/libguh-core/guhconfiguration.cpp b/libguh-core/guhconfiguration.cpp index da5b4636..f25ff6cc 100644 --- a/libguh-core/guhconfiguration.cpp +++ b/libguh-core/guhconfiguration.cpp @@ -318,6 +318,24 @@ void GuhConfiguration::setBluetoothServerEnabled(const bool &enabled) emit bluetoothServerEnabled(); } +bool GuhConfiguration::cloudEnabled() const +{ + GuhSettings settings(GuhSettings::SettingsRoleGlobal); + settings.beginGroup("Cloud"); + return settings.value("enabled", false).toBool(); +} + +void GuhConfiguration::setCloudEnabled(bool enabled) +{ + if (cloudEnabled() != enabled) { + GuhSettings settings(GuhSettings::SettingsRoleGlobal); + settings.beginGroup("Cloud"); + settings.setValue("enabled", enabled); + settings.endGroup(); + emit cloudEnabledChanged(enabled); + } +} + QString GuhConfiguration::cloudServerUrl() const { GuhSettings settings(GuhSettings::SettingsRoleGlobal); diff --git a/libguh-core/guhconfiguration.h b/libguh-core/guhconfiguration.h index 19b00adf..340e092d 100644 --- a/libguh-core/guhconfiguration.h +++ b/libguh-core/guhconfiguration.h @@ -110,6 +110,9 @@ public: void setBluetoothServerEnabled(const bool &enabled); // Cloud + bool cloudEnabled() const; + void setCloudEnabled(bool enabled); + QString cloudServerUrl() const; QString cloudCertificateCA() const; QString cloudCertificate() const; @@ -144,6 +147,7 @@ signals: void webSocketServerConfigurationRemoved(const QString &configId); void bluetoothServerEnabledChanged(); + void cloudEnabledChanged(bool enabled); }; } diff --git a/libguh-core/guhcore.cpp b/libguh-core/guhcore.cpp index acf6d334..cf733866 100644 --- a/libguh-core/guhcore.cpp +++ b/libguh-core/guhcore.cpp @@ -451,11 +451,10 @@ void GuhCore::init() { m_cloudManager->setDeviceName(m_configuration->serverName()); m_cloudManager->setServerUrl(m_configuration->cloudServerUrl()); m_cloudManager->setClientCertificates(m_configuration->cloudCertificateCA(), m_configuration->cloudCertificate(), m_configuration->cloudCertificateKey()); - if (!m_configuration->cloudServerUrl().isEmpty()) { - m_cloudManager->setEnabled(true); - } + m_cloudManager->setEnabled(m_configuration->cloudEnabled()); connect(m_configuration, &GuhConfiguration::localeChanged, this, &GuhCore::onLocaleChanged); + connect(m_configuration, &GuhConfiguration::cloudEnabledChanged, m_cloudManager, &CloudManager::setEnabled); connect(m_deviceManager, &DeviceManager::pluginConfigChanged, this, &GuhCore::pluginConfigChanged); connect(m_deviceManager, &DeviceManager::eventTriggered, this, &GuhCore::gotEvent); diff --git a/libguh-core/jsonrpc/configurationhandler.cpp b/libguh-core/jsonrpc/configurationhandler.cpp index 00b36da3..872b0845 100644 --- a/libguh-core/jsonrpc/configurationhandler.cpp +++ b/libguh-core/jsonrpc/configurationhandler.cpp @@ -164,6 +164,18 @@ ConfigurationHandler::ConfigurationHandler(QObject *parent): returns.insert("configurationError", JsonTypes::configurationErrorRef()); setReturns("DeleteWebServerConfiguration", returns); + params.clear(); returns.clear(); + setDescription("GetCloudEnabled", "Returns whether the cloud connection is enabled or disabled in the settings."); + setParams("GetCloudEnabled", params); + returns.insert("enabled", JsonTypes::basicTypeToString(QVariant::Bool)); + setReturns("GetCloudEnabled", returns); + + params.clear(); returns.clear(); + setDescription("SetCloudEnabled", "Sets whether the cloud connection is enabled or disabled in the settings."); + params.insert("enabled", JsonTypes::basicTypeToString(QVariant::Bool)); + setParams("SetCloudEnabled", params); + setReturns("SetCloudEnabled", returns); + // Notifications params.clear(); returns.clear(); setDescription("BasicConfigurationChanged", "Emitted whenever the basic configuration of this server changes."); @@ -389,6 +401,21 @@ JsonReply *ConfigurationHandler::DeleteWebSocketServerConfiguration(const QVaria return createReply(statusToReply(GuhConfiguration::ConfigurationErrorNoError)); } +JsonReply *ConfigurationHandler::GetCloudEnabled(const QVariantMap ¶ms) const +{ + Q_UNUSED(params) + QVariantMap ret; + ret.insert("enabled", GuhCore::instance()->configuration()->cloudEnabled()); + return createReply(ret); +} + +JsonReply *ConfigurationHandler::SetCloudEnabled(const QVariantMap ¶ms) const +{ + bool enabled = params.value("enabled").toBool(); + GuhCore::instance()->configuration()->setCloudEnabled(enabled); + return createReply(statusToReply(GuhConfiguration::ConfigurationErrorNoError)); +} + void ConfigurationHandler::onBasicConfigurationChanged() { QVariantMap params; diff --git a/libguh-core/jsonrpc/configurationhandler.h b/libguh-core/jsonrpc/configurationhandler.h index 9c0f1a78..c062e1db 100644 --- a/libguh-core/jsonrpc/configurationhandler.h +++ b/libguh-core/jsonrpc/configurationhandler.h @@ -47,6 +47,8 @@ public: Q_INVOKABLE JsonReply *DeleteWebServerConfiguration(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *SetWebSocketServerConfiguration(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *DeleteWebSocketServerConfiguration(const QVariantMap ¶ms) const; + Q_INVOKABLE JsonReply *GetCloudEnabled(const QVariantMap ¶ms) const; + Q_INVOKABLE JsonReply *SetCloudEnabled(const QVariantMap ¶ms) const; signals: void BasicConfigurationChanged(const QVariantMap ¶ms);