From 3a8fa74fcf2015adb9a8a2e8150dc54ec5d851f5 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 18 Feb 2023 13:13:23 +0100 Subject: [PATCH] Add location information to NymeaConfiguration --- .../jsonrpc/configurationhandler.cpp | 27 +++++++++++++++ libnymea-core/jsonrpc/configurationhandler.h | 1 + libnymea-core/nymeaconfiguration.cpp | 33 +++++++++++++++++++ libnymea-core/nymeaconfiguration.h | 6 ++++ nymea.pro | 2 +- tests/auto/api.json | 26 ++++++++++++++- 6 files changed, 93 insertions(+), 2 deletions(-) diff --git a/libnymea-core/jsonrpc/configurationhandler.cpp b/libnymea-core/jsonrpc/configurationhandler.cpp index f78332be..3c7134eb 100644 --- a/libnymea-core/jsonrpc/configurationhandler.cpp +++ b/libnymea-core/jsonrpc/configurationhandler.cpp @@ -108,6 +108,11 @@ ConfigurationHandler::ConfigurationHandler(QObject *parent): basicConfiguration.insert("d:serverTime", enumValueName(Uint)); basicConfiguration.insert("d:timeZone", enumValueName(String)); basicConfiguration.insert("d:language", enumValueName(String)); + QVariantMap location; + location.insert("latitude", enumValueName(Double)); + location.insert("longitude", enumValueName(Double)); + location.insert("name", enumValueName(String)); + basicConfiguration.insert("d:location", location); basicConfiguration.insert("debugServerEnabled", enumValueName(Bool)); returns.insert("basicConfiguration", basicConfiguration); QVariantList tcpServerConfigurations; @@ -144,6 +149,12 @@ ConfigurationHandler::ConfigurationHandler(QObject *parent): returns.insert("configurationError", enumRef()); registerMethod("SetLanguage", description, params, returns, Types::PermissionScopeAdmin, "Use the locale property in the Handshake message instead."); + params.clear(); returns.clear(); + description = "Sets the server location."; + params.insert("location", location); + returns.insert("configurationError", enumRef()); + registerMethod("SetLocation", description, params, returns, Types::PermissionScopeAdmin); + params.clear(); returns.clear(); description = "Enable or disable the debug server."; params.insert("enabled", enumValueName(String)); @@ -306,6 +317,7 @@ ConfigurationHandler::ConfigurationHandler(QObject *parent): connect(NymeaCore::instance()->configuration(), &NymeaConfiguration::serverNameChanged, this, &ConfigurationHandler::onBasicConfigurationChanged); connect(NymeaCore::instance()->configuration(), &NymeaConfiguration::timeZoneChanged, this, &ConfigurationHandler::onBasicConfigurationChanged); + connect(NymeaCore::instance()->configuration(), &NymeaConfiguration::locationChanged, this, &ConfigurationHandler::onBasicConfigurationChanged); connect(NymeaCore::instance()->configuration(), &NymeaConfiguration::localeChanged, this, &ConfigurationHandler::onBasicConfigurationChanged); connect(NymeaCore::instance()->configuration(), &NymeaConfiguration::debugServerEnabledChanged, this, &ConfigurationHandler::onBasicConfigurationChanged); connect(NymeaCore::instance()->configuration(), &NymeaConfiguration::localeChanged, this, &ConfigurationHandler::onLanguageChanged); @@ -423,6 +435,16 @@ JsonReply *ConfigurationHandler::SetLanguage(const QVariantMap ¶ms) const return createReply(statusToReply(NymeaConfiguration::ConfigurationErrorNoError)); } +JsonReply *ConfigurationHandler::SetLocation(const QVariantMap ¶ms) const +{ + QVariantMap locationMap = params.value("location").toMap(); + double latitude = locationMap.value("latitude").toDouble(); + double longitude = locationMap.value("longitude").toDouble(); + QString name = locationMap.value("name").toString(); + NymeaCore::instance()->configuration()->setLocation(latitude, longitude, name); + return createReply(statusToReply(NymeaConfiguration::ConfigurationErrorNoError)); +} + JsonReply *ConfigurationHandler::SetTcpServerConfiguration(const QVariantMap ¶ms) const { ServerConfiguration config = unpack(params.value("configuration").toMap()); @@ -734,6 +756,11 @@ QVariantMap ConfigurationHandler::packBasicConfiguration() basicConfiguration.insert("serverTime", NymeaCore::instance()->timeManager()->currentDateTime().toTime_t()); basicConfiguration.insert("timeZone", QTimeZone::systemTimeZoneId()); basicConfiguration.insert("language", NymeaCore::instance()->configuration()->locale().name()); + basicConfiguration.insert("location", QVariantMap{ + {"latitude", NymeaCore::instance()->configuration()->locationLatitude()}, + {"longitude", NymeaCore::instance()->configuration()->locationLongitude()}, + {"name", NymeaCore::instance()->configuration()->locationName()} + }); basicConfiguration.insert("debugServerEnabled", NymeaCore::instance()->configuration()->debugServerEnabled()); return basicConfiguration; } diff --git a/libnymea-core/jsonrpc/configurationhandler.h b/libnymea-core/jsonrpc/configurationhandler.h index 899d734a..22cd0847 100644 --- a/libnymea-core/jsonrpc/configurationhandler.h +++ b/libnymea-core/jsonrpc/configurationhandler.h @@ -52,6 +52,7 @@ public: Q_INVOKABLE JsonReply *SetServerName(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *SetTimeZone(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *SetLanguage(const QVariantMap ¶ms) const; + Q_INVOKABLE JsonReply *SetLocation(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *SetDebugServerEnabled(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *SetTcpServerConfiguration(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *DeleteTcpServerConfiguration(const QVariantMap ¶ms) const; diff --git a/libnymea-core/nymeaconfiguration.cpp b/libnymea-core/nymeaconfiguration.cpp index 7b11ccad..4abba5d3 100644 --- a/libnymea-core/nymeaconfiguration.cpp +++ b/libnymea-core/nymeaconfiguration.cpp @@ -285,6 +285,39 @@ void NymeaConfiguration::setTimeZone(const QByteArray &timeZone) } } +double NymeaConfiguration::locationLatitude() const +{ + NymeaSettings settings(NymeaSettings::SettingsRoleGlobal); + settings.beginGroup("nymead"); + return settings.value("locationLatitude").toDouble(); +} + +double NymeaConfiguration::locationLongitude() const +{ + NymeaSettings settings(NymeaSettings::SettingsRoleGlobal); + settings.beginGroup("nymead"); + return settings.value("locationLongitude").toDouble(); +} + +QString NymeaConfiguration::locationName() const +{ + NymeaSettings settings(NymeaSettings::SettingsRoleGlobal); + settings.beginGroup("nymead"); + return settings.value("locationName").toString(); +} + +void NymeaConfiguration::setLocation(double latitude, double longitude, const QString &name) +{ + NymeaSettings settings(NymeaSettings::SettingsRoleGlobal); + settings.beginGroup("nymead"); + if (settings.value("locationLatitude").toDouble() != latitude || settings.value("locationLongitude").toDouble() != longitude || settings.value("locationName").toString() != name) { + settings.setValue("locationLatitude", latitude); + settings.setValue("locationLongitude", longitude); + settings.setValue("locationName", name); + emit locationChanged(); + } +} + QLocale NymeaConfiguration::locale() const { NymeaSettings settings(NymeaSettings::SettingsRoleGlobal); diff --git a/libnymea-core/nymeaconfiguration.h b/libnymea-core/nymeaconfiguration.h index e0b8ca66..c223aedb 100644 --- a/libnymea-core/nymeaconfiguration.h +++ b/libnymea-core/nymeaconfiguration.h @@ -144,6 +144,11 @@ public: QByteArray timeZone() const; void setTimeZone(const QByteArray &timeZone); + double locationLatitude() const; + double locationLongitude() const; + QString locationName() const; + void setLocation(double latitude, double longitude, const QString &name); + QLocale locale() const; void setLocale(const QLocale &locale); @@ -225,6 +230,7 @@ signals: void serverNameChanged(const QString &serverName); void timeZoneChanged(); void localeChanged(); + void locationChanged(); void tcpServerConfigurationChanged(const QString &configId); void tcpServerConfigurationRemoved(const QString &configId); diff --git a/nymea.pro b/nymea.pro index c7e29087..8e63ce27 100644 --- a/nymea.pro +++ b/nymea.pro @@ -5,7 +5,7 @@ NYMEA_VERSION_STRING=$$system('dpkg-parsechangelog | sed -n -e "s/^Version: //p" # define protocol versions JSON_PROTOCOL_VERSION_MAJOR=7 -JSON_PROTOCOL_VERSION_MINOR=0 +JSON_PROTOCOL_VERSION_MINOR=1 JSON_PROTOCOL_VERSION="$${JSON_PROTOCOL_VERSION_MAJOR}.$${JSON_PROTOCOL_VERSION_MINOR}" LIBNYMEA_API_VERSION_MAJOR=7 LIBNYMEA_API_VERSION_MINOR=3 diff --git a/tests/auto/api.json b/tests/auto/api.json index 6c2c1f6e..ae3d37f7 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -1,4 +1,4 @@ -7.0 +7.1 { "enums": { "BasicType": [ @@ -657,6 +657,11 @@ "returns": { "basicConfiguration": { "d:language": "String", + "d:location": { + "latitude": "Double", + "longitude": "Double", + "name": "String" + }, "d:serverTime": "Uint", "d:timeZone": "String", "debugServerEnabled": "Bool", @@ -732,6 +737,20 @@ "configurationError": "$ref:ConfigurationError" } }, + "Configuration.SetLocation": { + "description": "Sets the server location.", + "params": { + "location": { + "latitude": "Double", + "longitude": "Double", + "name": "String" + } + }, + "permissionScope": "PermissionScopeAdmin", + "returns": { + "configurationError": "$ref:ConfigurationError" + } + }, "Configuration.SetMqttPolicy": { "description": "Configure a MQTT broker policy. If the ID is an existing one, the existing policy will be modified, otherwise a new one will be added.", "params": { @@ -2289,6 +2308,11 @@ "params": { "basicConfiguration": { "d:language": "String", + "d:location": { + "latitude": "Double", + "longitude": "Double", + "name": "String" + }, "d:serverTime": "Uint", "d:timeZone": "String", "debugServerEnabled": "Bool",