Merge PR #630: Add location setting

pull/645/head
jenkins 2023-05-23 11:49:05 +02:00
commit 2cd6db2b8f
5 changed files with 91 additions and 0 deletions

View File

@ -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<NymeaConfiguration::ConfigurationError>());
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<NymeaConfiguration::ConfigurationError>());
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 &params) const
return createReply(statusToReply(NymeaConfiguration::ConfigurationErrorNoError));
}
JsonReply *ConfigurationHandler::SetLocation(const QVariantMap &params) 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 &params) const
{
ServerConfiguration config = unpack<ServerConfiguration>(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;
}

View File

@ -52,6 +52,7 @@ public:
Q_INVOKABLE JsonReply *SetServerName(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *SetTimeZone(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *SetLanguage(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *SetLocation(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *SetDebugServerEnabled(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *SetTcpServerConfiguration(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *DeleteTcpServerConfiguration(const QVariantMap &params) const;

View File

@ -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);

View File

@ -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);

View File

@ -653,6 +653,11 @@
"returns": {
"basicConfiguration": {
"d:language": "String",
"d:location": {
"latitude": "Double",
"longitude": "Double",
"name": "String"
},
"d:serverTime": "Uint",
"d:timeZone": "String",
"debugServerEnabled": "Bool",
@ -728,6 +733,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": {
@ -2276,6 +2295,11 @@
"params": {
"basicConfiguration": {
"d:language": "String",
"d:location": {
"latitude": "Double",
"longitude": "Double",
"name": "String"
},
"d:serverTime": "Uint",
"d:timeZone": "String",
"debugServerEnabled": "Bool",