mirror of
https://github.com/overte-org/overte.git
synced 2025-04-19 15:43:50 +02:00
populate the settings page correctly with existing values
This commit is contained in:
parent
f8dccad6ec
commit
6519d4028a
4 changed files with 54 additions and 24 deletions
|
@ -25,11 +25,11 @@ setup_hifi_project(${TARGET_NAME} TRUE)
|
|||
# remove and then copy the files for the webserver
|
||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E remove_directory
|
||||
$<TARGET_FILE_DIR:${TARGET_NAME}>/resources)
|
||||
$<TARGET_FILE_DIR:${TARGET_NAME}>/resources/web)
|
||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${PROJECT_SOURCE_DIR}/resources"
|
||||
$<TARGET_FILE_DIR:${TARGET_NAME}>/resources)
|
||||
"${PROJECT_SOURCE_DIR}/resources/web"
|
||||
$<TARGET_FILE_DIR:${TARGET_NAME}>/resources/web)
|
||||
|
||||
# link the shared hifi library
|
||||
include(${MACRO_DIR}/LinkHifiLibrary.cmake)
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
var Settings = {};
|
||||
|
||||
$(document).ready(function(){
|
||||
Handlebars.registerHelper('setKey', function(value){
|
||||
this.key = value;
|
||||
Handlebars.registerHelper('setGroup', function(value){
|
||||
this.group = value;
|
||||
});
|
||||
|
||||
Handlebars.registerHelper('settingsValue', function(values, key, group){
|
||||
return values[group][key];
|
||||
});
|
||||
|
||||
var source = $('#template').html();
|
||||
|
@ -12,11 +16,13 @@ $(document).ready(function(){
|
|||
});
|
||||
|
||||
function reloadSettings() {
|
||||
$.getJSON('describe.json', function(data){
|
||||
$.getJSON('/settings.json', function(data){
|
||||
$('#settings').html(Settings.template(data));
|
||||
});
|
||||
}
|
||||
|
||||
var SETTINGS_ERROR_MESSAGE = "There was a problem saving domain settings. Please try again!";
|
||||
|
||||
$('#settings').on('click', 'button', function(e){
|
||||
// grab a JSON representation of the form via form2js
|
||||
var formJSON = form2js('settings-form', ".", false, null, true);
|
||||
|
@ -26,17 +32,26 @@ $('#settings').on('click', 'button', function(e){
|
|||
data: JSON.stringify(formJSON),
|
||||
contentType: 'application/json',
|
||||
type: 'POST'
|
||||
}).done(function(){
|
||||
}).done(function(data){
|
||||
if (data.status == "success") {
|
||||
showAlertMessage("Domain settings saved.", true);
|
||||
} else {
|
||||
showAlertMessage(SETTINGS_ERROR_MESSAGE, false);
|
||||
}
|
||||
|
||||
reloadSettings();
|
||||
}).fail(function(){
|
||||
var alertBox = $('.alert');
|
||||
alertBox.attr('class', 'alert');
|
||||
alertBox.addClass('alert-danger');
|
||||
alertBox.html("There was a problem saving domain settings. Please try again!");
|
||||
alertBox.fadeIn();
|
||||
|
||||
showAlertMessage(SETTINGS_ERROR_MESSAGE, false);
|
||||
reloadSettings();
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
function showAlertMessage(message, isSuccess) {
|
||||
var alertBox = $('.alert');
|
||||
alertBox.attr('class', 'alert');
|
||||
alertBox.addClass(isSuccess ? 'alert-success' : 'alert-danger');
|
||||
alertBox.html(message);
|
||||
alertBox.fadeIn();
|
||||
}
|
|
@ -5,8 +5,8 @@
|
|||
<form class="form-horizontal" id="settings-form" role="form">
|
||||
|
||||
<script id="template" type="text/x-handlebars-template">
|
||||
{{#each .}}
|
||||
{{setKey @key}}
|
||||
{{#each descriptions}}
|
||||
{{setGroup @key}}
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{{label}}</h3>
|
||||
|
@ -15,7 +15,7 @@
|
|||
{{#each settings}}
|
||||
<div class="form-group">
|
||||
<label for="{{../key}}.{{@key}}" class="col-sm-2 control-label">{{label}}</label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" id="{{../key}}.{{@key}}" placeholder="{{placeholder}}"></div>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" id="{{../group}}.{{@key}}" placeholder="{{placeholder}}" value="{{settingsValue ../../values @key ../group}}"></div>
|
||||
<p class="help-block col-sm-offset-2 col-sm-10">{{help}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "DomainServerSettingsManager.h"
|
||||
|
||||
const QString SETTINGS_DESCRIPTION_RELATIVE_PATH = "/resources/web/settings/describe.json";
|
||||
const QString SETTINGS_CONFIG_FILE_RELATIVE_PATH = "/resources/config.json";
|
||||
|
||||
DomainServerSettingsManager::DomainServerSettingsManager() :
|
||||
_descriptionObject(),
|
||||
|
@ -29,7 +30,12 @@ DomainServerSettingsManager::DomainServerSettingsManager() :
|
|||
descriptionFile.open(QIODevice::ReadOnly);
|
||||
|
||||
_descriptionObject = QJsonDocument::fromJson(descriptionFile.readAll()).object();
|
||||
qDebug() << _descriptionObject;
|
||||
|
||||
// load the existing config file to get the current values
|
||||
QFile configFile(QCoreApplication::applicationDirPath() + SETTINGS_CONFIG_FILE_RELATIVE_PATH);
|
||||
configFile.open(QIODevice::ReadOnly);
|
||||
|
||||
_settingsMap = QJsonDocument::fromJson(configFile.readAll()).toVariant().toMap();
|
||||
}
|
||||
|
||||
bool DomainServerSettingsManager::handleHTTPRequest(HTTPConnection* connection, const QUrl &url) {
|
||||
|
@ -41,12 +47,23 @@ bool DomainServerSettingsManager::handleHTTPRequest(HTTPConnection* connection,
|
|||
// we recurse one level deep below each group for the appropriate setting
|
||||
recurseJSONObjectAndOverwriteSettings(postedObject, _settingsMap, _descriptionObject);
|
||||
|
||||
// now let's look at the settingsMap?
|
||||
qDebug() << QJsonDocument::fromVariant(_settingsMap).toJson();
|
||||
|
||||
// store whatever the current _settingsMap is to file
|
||||
persistToFile();
|
||||
|
||||
return false;
|
||||
// return success to the caller
|
||||
QString jsonSuccess = "{\"status\": \"success\"}";
|
||||
connection->respond(HTTPConnection::StatusCode200, jsonSuccess.toUtf8(), "application/json");
|
||||
|
||||
return true;
|
||||
} else if (connection->requestOperation() == QNetworkAccessManager::GetOperation && url.path() == "/settings.json") {
|
||||
// this is a GET operation for our settings
|
||||
// combine the description object and our current settings map
|
||||
QJsonObject combinedObject;
|
||||
combinedObject["descriptions"] = _descriptionObject;
|
||||
combinedObject["values"] = QJsonDocument::fromVariant(_settingsMap).object();
|
||||
|
||||
connection->respond(HTTPConnection::StatusCode200, QJsonDocument(combinedObject).toJson(), "application/json");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -86,10 +103,8 @@ void DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ
|
|||
}
|
||||
}
|
||||
|
||||
const QString SETTINGS_JSON_FILE_RELATIVE_PATH = "/resources/config.json";
|
||||
|
||||
void DomainServerSettingsManager::persistToFile() {
|
||||
QFile settingsFile(QCoreApplication::applicationDirPath() + SETTINGS_JSON_FILE_RELATIVE_PATH);
|
||||
QFile settingsFile(QCoreApplication::applicationDirPath() + SETTINGS_CONFIG_FILE_RELATIVE_PATH);
|
||||
|
||||
if (settingsFile.open(QIODevice::WriteOnly)) {
|
||||
settingsFile.write(QJsonDocument::fromVariant(_settingsMap).toJson());
|
||||
|
|
Loading…
Reference in a new issue