fix for settings save without organization

This commit is contained in:
Stephen Birarda 2014-09-29 10:09:33 -07:00
parent 46258ae78f
commit bd4a32551b
5 changed files with 29 additions and 20 deletions

View file

@ -48,7 +48,7 @@ DomainServer::DomainServer(int argc, char* argv[]) :
_sessionAuthenticationHash(),
_webAuthenticationStateSet(),
_cookieSessionHash(),
_settingsManager(arguments())
_settingsManager()
{
LogUtils::init();
@ -57,6 +57,8 @@ DomainServer::DomainServer(int argc, char* argv[]) :
setApplicationName("domain-server");
QSettings::setDefaultFormat(QSettings::IniFormat);
_settingsManager.setupConfigMap(arguments());
installNativeEventFilter(&_shutdownEventListener);
connect(&_shutdownEventListener, SIGNAL(receivedCloseEvent()), SLOT(quit()));

View file

@ -26,9 +26,9 @@
const QString SETTINGS_DESCRIPTION_RELATIVE_PATH = "/resources/describe-settings.json";
DomainServerSettingsManager::DomainServerSettingsManager(const QStringList& argumentList) :
DomainServerSettingsManager::DomainServerSettingsManager() :
_descriptionArray(),
_configMap(argumentList)
_configMap()
{
// load the description object from the settings description
QFile descriptionFile(QCoreApplication::applicationDirPath() + SETTINGS_DESCRIPTION_RELATIVE_PATH);
@ -37,6 +37,10 @@ DomainServerSettingsManager::DomainServerSettingsManager(const QStringList& argu
_descriptionArray = QJsonDocument::fromJson(descriptionFile.readAll()).array();
}
void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList) {
_configMap.loadMasterAndUserConfig(argumentList);
}
const QString SETTINGS_PATH = "/settings.json";
bool DomainServerSettingsManager::handlePublicHTTPRequest(HTTPConnection* connection, const QUrl &url) {
@ -239,13 +243,13 @@ void DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ
void DomainServerSettingsManager::persistToFile() {
// make sure we have the dir the settings file is supposed to live in
QFileInfo settingsFileInfo(_settingsFilepath);
QFileInfo settingsFileInfo(_configMap.getUserConfigFilename());
if (!settingsFileInfo.dir().exists()) {
settingsFileInfo.dir().mkpath(".");
}
QFile settingsFile(_settingsFilepath);
QFile settingsFile(_configMap.getUserConfigFilename());
if (settingsFile.open(QIODevice::WriteOnly)) {
settingsFile.write(QJsonDocument::fromVariant(_configMap.getUserConfig()).toJson());

View file

@ -21,10 +21,12 @@
class DomainServerSettingsManager : public QObject {
Q_OBJECT
public:
DomainServerSettingsManager(const QStringList& argumentList);
DomainServerSettingsManager();
bool handlePublicHTTPRequest(HTTPConnection* connection, const QUrl& url);
bool handleAuthenticatedHTTPRequest(HTTPConnection* connection, const QUrl& url);
void setupConfigMap(const QStringList& argumentList);
QVariantMap& getSettingsMap() { return _configMap.getMergedConfig(); }
private:
QJsonObject responseObjectForType(const QString& typeValue, bool isAuthenticated = false);
@ -34,7 +36,6 @@ private:
QJsonArray _descriptionArray;
HifiConfigVariantMap _configMap;
QString _settingsFilepath;
};
#endif // hifi_DomainServerSettingsManager_h

View file

@ -87,13 +87,16 @@ QVariantMap HifiConfigVariantMap::mergeCLParametersWithJSONConfig(const QStringL
return mergedMap;
}
HifiConfigVariantMap::HifiConfigVariantMap(const QStringList& argumentList) :
_masterConfigPath(),
_userConfigPath(),
HifiConfigVariantMap::HifiConfigVariantMap() :
_userConfigFilename(),
_masterConfig(),
_userConfig(),
_mergedConfig()
{
}
void HifiConfigVariantMap::loadMasterAndUserConfig(const QStringList& argumentList) {
// check if there is a master config file
const QString MASTER_CONFIG_FILE_OPTION = "--master-config";
@ -108,16 +111,15 @@ HifiConfigVariantMap::HifiConfigVariantMap(const QStringList& argumentList) :
const QString USER_CONFIG_FILE_OPTION = "--user-config";
int userConfigIndex = argumentList.indexOf(USER_CONFIG_FILE_OPTION);
QString userConfigFilepath;
if (userConfigIndex != -1) {
_userConfigPath = argumentList[userConfigIndex + 1];
_userConfigFilename = argumentList[userConfigIndex + 1];
} else {
_userConfigPath = QString("%1%2/%3/config.json").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation),
QCoreApplication::organizationName(),
QCoreApplication::applicationName());
_userConfigFilename = QString("%1/%2/%3/config.json").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation),
QCoreApplication::organizationName(),
QCoreApplication::applicationName());
}
loadMapFromJSONFile(_userConfig, _userConfigPath);
loadMapFromJSONFile(_userConfig, _userConfigFilename);
// the merged config is initially matched to the master config
_mergedConfig = _masterConfig;

View file

@ -18,16 +18,16 @@ class HifiConfigVariantMap {
public:
static QVariantMap mergeCLParametersWithJSONConfig(const QStringList& argumentList);
HifiConfigVariantMap(const QStringList& argumentList);
HifiConfigVariantMap();
void loadMasterAndUserConfig(const QStringList& argumentList);
const QVariantMap& getMasterConfig() const { return _masterConfig; }
QVariantMap& getUserConfig() { return _userConfig; }
QVariantMap& getMergedConfig() { return _mergedConfig; }
const QString& userConfigFilepath() const { return _userConfigPath; }
const QString& getUserConfigFilename() const { return _userConfigFilename; }
private:
QString _masterConfigPath;
QString _userConfigPath;
QString _userConfigFilename;
QVariantMap _masterConfig;
QVariantMap _userConfig;