From eaca3b672ff038a8d58bac07120a3d39714da70b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 13 Sep 2016 17:28:40 -0700 Subject: [PATCH 1/6] Switch to JSON for application settings --- assignment-client/src/AssignmentClient.cpp | 3 - assignment-client/src/AssignmentClientApp.cpp | 4 +- cmake/templates/BuildInfo.h.in | 12 +- domain-server/src/DomainServer.cpp | 5 +- .../src/DomainServerSettingsManager.cpp | 15 +- interface/resources/info/ApplicationInfo.ini | 4 - interface/src/Application.cpp | 8 +- interface/src/CrashHandler.cpp | 8 +- interface/src/Util.h | 1 - interface/src/main.cpp | 13 +- libraries/auto-updater/src/AutoUpdater.h | 2 - libraries/networking/src/AddressManager.cpp | 2 +- libraries/shared/src/SettingHandle.cpp | 19 +- libraries/shared/src/SettingHandle.h | 6 +- libraries/shared/src/SettingInterface.cpp | 297 +++++++++++++++++- libraries/shared/src/SettingInterface.h | 3 - libraries/shared/src/SettingManager.cpp | 4 +- 17 files changed, 324 insertions(+), 82 deletions(-) delete mode 100644 interface/resources/info/ApplicationInfo.ini diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 800f00b352..cb1f9edc88 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include @@ -50,8 +49,6 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri { LogUtils::init(); - QSettings::setDefaultFormat(QSettings::IniFormat); - DependencyManager::set(); auto scriptableAvatar = DependencyManager::set(); diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index c425a239dd..cd46731acc 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -40,9 +40,9 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : ShutdownEventListener::getInstance(); # endif + setApplicationName(BuildInfo::ASSIGNMENT_CLIENT_NAME); setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); - setOrganizationDomain("highfidelity.io"); - setApplicationName("assignment-client"); + setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); setApplicationVersion(BuildInfo::VERSION); // use the verbose message handler in Logging diff --git a/cmake/templates/BuildInfo.h.in b/cmake/templates/BuildInfo.h.in index 3d388a907f..579f2dc1d7 100644 --- a/cmake/templates/BuildInfo.h.in +++ b/cmake/templates/BuildInfo.h.in @@ -1,6 +1,6 @@ // // BuildInfo.h.in -// cmake/macros +// cmake/templates // // Created by Stephen Birarda on 1/14/16. // Copyright 2015 High Fidelity, Inc. @@ -11,10 +11,18 @@ #define USE_STABLE_GLOBAL_SERVICES @USE_STABLE_GLOBAL_SERVICES@ +#include + namespace BuildInfo { + // WARNING: This file has been auto-generated. + // Check cmake/templates/BuildInfo.h.in if you want to modify it. + + const QString INTERFACE_NAME = "Interface"; + const QString ASSIGNMENT_CLIENT_NAME = "assignment-client"; + const QString DOMAIN_SERVER_NAME = "domain-server"; const QString MODIFIED_ORGANIZATION = "@BUILD_ORGANIZATION@"; + const QString ORGANIZATION_DOMAIN = "highfidelity.io"; const QString VERSION = "@BUILD_VERSION@"; const QString BUILD_BRANCH = "@BUILD_BRANCH@"; const QString BUILD_GLOBAL_SERVICES = "@BUILD_GLOBAL_SERVICES@"; } - diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 26c37f1918..0f4e62c52d 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -79,11 +79,10 @@ DomainServer::DomainServer(int argc, char* argv[]) : connect(this, &QCoreApplication::aboutToQuit, this, &DomainServer::aboutToQuit); + setApplicationName(BuildInfo::DOMAIN_SERVER_NAME); setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); - setOrganizationDomain("highfidelity.io"); - setApplicationName("domain-server"); + setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); setApplicationVersion(BuildInfo::VERSION); - QSettings::setDefaultFormat(QSettings::IniFormat); qDebug() << "Setting up domain-server"; diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index c7944bbcad..50e0efc9fa 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -9,6 +9,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "DomainServerSettingsManager.h" + #include #include @@ -16,20 +18,19 @@ #include #include #include -#include #include #include #include -#include #include +#include #include #include #include #include #include +#include -#include "DomainServerSettingsManager.h" const QString SETTINGS_DESCRIPTION_RELATIVE_PATH = "/resources/describe-settings.json"; @@ -41,6 +42,8 @@ const QString DESCRIPTION_COLUMNS_KEY = "columns"; const QString SETTINGS_VIEWPOINT_KEY = "viewpoint"; +static const Setting::Handle JSON_SETTING_VERSION("json-settings/version", 0.0); + DomainServerSettingsManager::DomainServerSettingsManager() : _descriptionArray(), _configMap() @@ -101,9 +104,7 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList // What settings version were we before and what are we using now? // Do we need to do any re-mapping? - QSettings appSettings; - const QString JSON_SETTINGS_VERSION_KEY = "json-settings/version"; - double oldVersion = appSettings.value(JSON_SETTINGS_VERSION_KEY, 0.0).toDouble(); + double oldVersion = JSON_SETTING_VERSION.get(); if (oldVersion != _descriptionVersion) { const QString ALLOWED_USERS_SETTINGS_KEYPATH = "security.allowed_users"; @@ -299,7 +300,7 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList unpackPermissions(); // write the current description version to our settings - appSettings.setValue(JSON_SETTINGS_VERSION_KEY, _descriptionVersion); + JSON_SETTING_VERSION.set(_descriptionVersion); } QVariantMap& DomainServerSettingsManager::getDescriptorsMap() { diff --git a/interface/resources/info/ApplicationInfo.ini b/interface/resources/info/ApplicationInfo.ini deleted file mode 100644 index 1a7142cb76..0000000000 --- a/interface/resources/info/ApplicationInfo.ini +++ /dev/null @@ -1,4 +0,0 @@ -[INFO] -name=Interface -organizationName=High Fidelity -organizationDomain=highfidelity.io \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 80e444462f..5ac46f6669 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -406,11 +406,7 @@ bool setupEssentials(int& argc, char** argv) { const char* portStr = getCmdOption(argc, constArgv, "--listenPort"); const int listenPort = portStr ? atoi(portStr) : INVALID_PORT; - // Set build version - QCoreApplication::setApplicationVersion(BuildInfo::VERSION); - - Setting::preInit(); - + Setting::init(); static const auto SUPPRESS_SETTINGS_RESET = "--suppress-settings-reset"; bool suppressPrompt = cmdOptionExists(argc, const_cast(argv), SUPPRESS_SETTINGS_RESET); @@ -423,8 +419,6 @@ bool setupEssentials(int& argc, char** argv) { DependencyManager::registerInheritance(); DependencyManager::registerInheritance(); - Setting::init(); - // Set dependencies DependencyManager::set(std::bind(&Application::getUserAgent, qApp)); DependencyManager::set(); diff --git a/interface/src/CrashHandler.cpp b/interface/src/CrashHandler.cpp index 3c5f03bef3..f3e4cbfb07 100644 --- a/interface/src/CrashHandler.cpp +++ b/interface/src/CrashHandler.cpp @@ -18,18 +18,17 @@ #include #include #include -#include #include #include #include #include "Menu.h" +#include static const QString RUNNING_MARKER_FILENAME = "Interface.running"; bool CrashHandler::checkForResetSettings(bool suppressPrompt) { - QSettings::setDefaultFormat(QSettings::IniFormat); - QSettings settings; + Settings settings; settings.beginGroup("Developer"); QVariant displayCrashOptions = settings.value(MenuOption::DisplayCrashOptions); QVariant askToResetSettingsOption = settings.value(MenuOption::AskToResetSettings); @@ -109,8 +108,7 @@ void CrashHandler::handleCrash(CrashHandler::Action action) { return; } - QSettings::setDefaultFormat(QSettings::IniFormat); - QSettings settings; + Settings settings; const QString ADDRESS_MANAGER_GROUP = "AddressManager"; const QString ADDRESS_KEY = "address"; const QString AVATAR_GROUP = "Avatar"; diff --git a/interface/src/Util.h b/interface/src/Util.h index e3938502d2..60e38ae0ec 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -14,7 +14,6 @@ #include #include -#include #include diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 3c4a3fd77a..85a630ee07 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -31,12 +30,13 @@ #include "MainWindow.h" #include -#ifdef HAS_BUGSPLAT #include +#ifdef HAS_BUGSPLAT #include #include #endif + int main(int argc, const char* argv[]) { #if HAS_BUGSPLAT static QString BUG_SPLAT_DATABASE = "interface_alpha"; @@ -45,7 +45,13 @@ int main(int argc, const char* argv[]) { #endif disableQtBearerPoll(); // Fixes wifi ping spikes - + + // Set application infos + QCoreApplication::setApplicationName(BuildInfo::INTERFACE_NAME); + QCoreApplication::setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); + QCoreApplication::setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); + QCoreApplication::setApplicationVersion(BuildInfo::VERSION); + QString applicationName = "High Fidelity Interface - " + qgetenv("USERNAME"); bool instanceMightBeRunning = true; @@ -168,7 +174,6 @@ int main(int argc, const char* argv[]) { int exitCode; { - QSettings::setDefaultFormat(QSettings::IniFormat); Application app(argc, const_cast(argv), startupTime); // If we failed the OpenGLVersion check, log it. diff --git a/libraries/auto-updater/src/AutoUpdater.h b/libraries/auto-updater/src/AutoUpdater.h index 70867e5a44..1e62ce0283 100644 --- a/libraries/auto-updater/src/AutoUpdater.h +++ b/libraries/auto-updater/src/AutoUpdater.h @@ -12,8 +12,6 @@ #ifndef hifi_AutoUpdater_h #define hifi_AutoUpdater_h - -#include #include #include #include diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index f7f305dcc8..5f6763db83 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -95,7 +95,7 @@ QUrl AddressManager::currentFacingShareableAddress() const { void AddressManager::loadSettings(const QString& lookupString) { if (lookupString.isEmpty()) { - handleUrl(currentAddressHandle.get().toString(), LookupTrigger::StartupFromSettings); + handleUrl(currentAddressHandle.get(), LookupTrigger::StartupFromSettings); } else { handleUrl(lookupString, LookupTrigger::StartupFromSettings); } diff --git a/libraries/shared/src/SettingHandle.cpp b/libraries/shared/src/SettingHandle.cpp index 13f9ea48ce..4a0ff9df71 100644 --- a/libraries/shared/src/SettingHandle.cpp +++ b/libraries/shared/src/SettingHandle.cpp @@ -19,16 +19,12 @@ const QString Settings::firstRun { "firstRun" }; -Settings::Settings() : - _manager(DependencyManager::get()), - _locker(&(_manager->getLock())) +Settings::Settings() : _manager(DependencyManager::get()) { } -Settings::~Settings() { - if (_prefixes.size() != 0) { - qFatal("Unstable Settings Prefixes: You must call endGroup for every beginGroup and endArray for every begin*Array call"); - } +QString Settings::fileName() const { + return _manager->fileName(); } void Settings::remove(const QString& key) { @@ -54,17 +50,14 @@ bool Settings::contains(const QString& key) const { } int Settings::beginReadArray(const QString & prefix) { - _prefixes.push(prefix); return _manager->beginReadArray(prefix); } void Settings::beginWriteArray(const QString& prefix, int size) { - _prefixes.push(prefix); _manager->beginWriteArray(prefix, size); } void Settings::endArray() { - _prefixes.pop(); _manager->endArray(); } @@ -73,19 +66,15 @@ void Settings::setArrayIndex(int i) { } void Settings::beginGroup(const QString& prefix) { - _prefixes.push(prefix); _manager->beginGroup(prefix); } void Settings::endGroup() { - _prefixes.pop(); _manager->endGroup(); } void Settings::setValue(const QString& name, const QVariant& value) { - if (_manager->value(name) != value) { - _manager->setValue(name, value); - } + _manager->setValue(name, value); } QVariant Settings::value(const QString& name, const QVariant& defaultValue) const { diff --git a/libraries/shared/src/SettingHandle.h b/libraries/shared/src/SettingHandle.h index 5133a9cb2a..54694dfd0a 100644 --- a/libraries/shared/src/SettingHandle.h +++ b/libraries/shared/src/SettingHandle.h @@ -14,7 +14,6 @@ #include -#include #include #include #include @@ -32,7 +31,8 @@ class Settings { public: static const QString firstRun; Settings(); - ~Settings(); + + QString fileName() const; void remove(const QString& key); QStringList childGroups() const; @@ -61,8 +61,6 @@ public: private: QSharedPointer _manager; - QWriteLocker _locker; - QStack _prefixes; }; namespace Setting { diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index 9db84055f7..1267147b7e 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -20,10 +20,245 @@ #include "SettingManager.h" #include "SharedLogging.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +QStringList splitArgs(const QString& string, int idx) { + int length = string.length(); + Q_ASSERT(length > 0); + Q_ASSERT(string.at(idx) == QLatin1Char('(')); + Q_ASSERT(string.at(length - 1) == QLatin1Char(')')); + + QStringList result; + QString item; + + for (++idx; idx < length; ++idx) { + QChar c = string.at(idx); + if (c == QLatin1Char(')')) { + Q_ASSERT(idx == length - 1); + result.append(item); + } else if (c == QLatin1Char(' ')) { + result.append(item); + item.clear(); + } else { + item.append(c); + } + } + + return result; +} + +QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) { + qDebug() << Q_FUNC_INFO << map.size() << "in map"; + + QJsonObject object; + for (auto it = map.cbegin(); it != map.cend(); ++it) { + auto& key = it.key(); + auto& variant = it.value(); + auto variantType = variant.type(); + + // Switch some types so they are readable/modifiable in the json file + if (variantType == QVariant(1.0f).type()) { // float + variantType = QVariant::Double; + } + if (variantType == QVariant((quint16)0).type()) { // uint16 + variantType = QVariant::UInt; + } + + switch (variantType) { + case QVariant::Map: + case QVariant::List: + case QVariant::Hash: { + qCritical() << "Unsupported variant type" << variant.typeName(); + Q_ASSERT(false); + break; + } + + case QVariant::Invalid: + object.insert(key, QJsonValue()); + break; + case QVariant::LongLong: + case QVariant::ULongLong: + case QVariant::Int: + case QVariant::UInt: + case QVariant::Bool: + case QVariant::Double: + object.insert(key, QJsonValue::fromVariant(variant)); + break; + + case QVariant::String: { + QString result = variant.toString(); + if (result.startsWith(QLatin1Char('@'))) { + result.prepend(QLatin1Char('@')); + } + object.insert(key, result); + break; + } + + case QVariant::ByteArray: { + QByteArray a = variant.toByteArray(); + QString result = QLatin1String("@ByteArray("); + result += QString::fromLatin1(a.constData(), a.size()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + case QVariant::Rect: { + QRect r = qvariant_cast(variant); + QString result = QLatin1String("@Rect("); + result += QString::number(r.x()); + result += QLatin1Char(' '); + result += QString::number(r.y()); + result += QLatin1Char(' '); + result += QString::number(r.width()); + result += QLatin1Char(' '); + result += QString::number(r.height()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + case QVariant::Size: { + QSize s = qvariant_cast(variant); + QString result = QLatin1String("@Size("); + result += QString::number(s.width()); + result += QLatin1Char(' '); + result += QString::number(s.height()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + case QVariant::Point: { + QPoint p = qvariant_cast(variant); + QString result = QLatin1String("@Point("); + result += QString::number(p.x()); + result += QLatin1Char(' '); + result += QString::number(p.y()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + + default: { + QByteArray array; + { + QDataStream stream(&array, QIODevice::WriteOnly); + stream.setVersion(QDataStream::Qt_4_0); + stream << variant; + } + + QString result = QLatin1String("@Variant("); + result += QString::fromLatin1(array.constData(), array.size()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + } + } + + qDebug() << Q_FUNC_INFO << object.size() << "in json"; + + return QJsonDocument(object); +} + + +QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document) { + if (!document.isObject()) { + qWarning() << "Settings file does not contain a JSON object"; + return QSettings::SettingsMap(); + } + auto object = document.object(); + qDebug() << Q_FUNC_INFO << object.size() << "in json"; + QSettings::SettingsMap map; + + for (auto it = object.begin(); it != object.end(); ++it) { + + QVariant result; + + if (!it->isString()) { + result = it->toVariant(); + } else { + auto string = it->toString(); + + if (string.startsWith(QLatin1String("@@"))) { + result = QVariant(string.mid(1)); + + } else if (string.startsWith(QLatin1Char('@'))) { + + if (string.endsWith(QLatin1Char(')'))) { + + if (string.startsWith(QLatin1String("@ByteArray("))) { + result = QVariant(string.toLatin1().mid(11, string.size() - 12)); + + } else if (string.startsWith(QLatin1String("@Variant("))) { + QByteArray a(string.toLatin1().mid(9)); + QDataStream stream(&a, QIODevice::ReadOnly); + stream.setVersion(QDataStream::Qt_4_0); + stream >> result; + + } else if (string.startsWith(QLatin1String("@Rect("))) { + QStringList args = splitArgs(string, 5); + if (args.size() == 4) { + result = QRect(args[0].toInt(), args[1].toInt(), + args[2].toInt(), args[3].toInt()); + } + + } else if (string.startsWith(QLatin1String("@Size("))) { + QStringList args = splitArgs(string, 5); + if (args.size() == 2) { + result = QSize(args[0].toInt(), args[1].toInt()); + } + + } else if (string.startsWith(QLatin1String("@Point("))) { + QStringList args = splitArgs(string, 6); + if (args.size() == 2) { + result = QPoint(args[0].toInt(), args[1].toInt()); + } + } + } + } + } + + map.insert(it.key(), result); + } + + qDebug() << Q_FUNC_INFO << map.size() << "in map"; + return map; +} + +bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map) { + QJsonParseError jsonParseError; + + auto bytesRead = device.readAll(); + auto document = QJsonDocument::fromJson(bytesRead, &jsonParseError); + + if (jsonParseError.error != QJsonParseError::NoError) { + qDebug() << "Error parsing QSettings file:" << jsonParseError.errorString(); + return false; + } + + map = jsonDocumentToVariantMap(document); + + return true; +} +bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map) { + auto document = variantMapToJsonDocument(map); + auto jsonByteArray = document.toJson(QJsonDocument::Indented); + auto bytesWritten = device.write(jsonByteArray); + return bytesWritten == jsonByteArray.size(); +} + +const auto jsonFormat = QSettings::registerFormat("json", readJSONFile, writeJSONFile); + + namespace Setting { static QSharedPointer globalManager; - - const QString Interface::FIRST_RUN { "firstRun" }; // cleans up the settings private instance. Should only be run once at closing down. void cleanupPrivateInstance() { @@ -40,30 +275,58 @@ namespace Setting { settingsManagerThread->quit(); settingsManagerThread->wait(); } + + // Sets up the settings private instance. Should only be run once at startup. preInit() must be run beforehand, + void init() { + // Set settings format + QSettings::setDefaultFormat(jsonFormat); + QSettings settings; - // Set up application settings. Should only be run once at startup. - void preInit() { - // read the ApplicationInfo.ini file for Name/Version/Domain information - QSettings::setDefaultFormat(QSettings::IniFormat); - QSettings applicationInfo(PathUtils::resourcesPath() + "info/ApplicationInfo.ini", QSettings::IniFormat); - // set the associated application properties - applicationInfo.beginGroup("INFO"); - QCoreApplication::setApplicationName(applicationInfo.value("name").toString()); - QCoreApplication::setOrganizationName(applicationInfo.value("organizationName").toString()); - QCoreApplication::setOrganizationDomain(applicationInfo.value("organizationDomain").toString()); + if (settings.allKeys().size() == 0) { + + QSettings::setDefaultFormat(QSettings::IniFormat); + QSettings iniSettings; + if (iniSettings.allKeys().size()) { + qDebug() << "No data in json settings file, trying to load old ini settings file."; + + for (auto key : iniSettings.allKeys()) { + auto variant = iniSettings.value(key); + + if (variant.type() == QVariant::String) { + auto string = variant.toString(); + if (string == "true") { + variant = true; + } else if (string == "false") { + variant = false; + } else { + bool ok; + double value = string.toDouble(&ok); + if (ok) { + variant = value; + } + } + } + settings.setValue(key, variant); + } + + qDebug() << "Loaded" << settings.allKeys().size() << "keys from ini settings file."; + } + + QSettings::setDefaultFormat(jsonFormat); + } + + + qDebug() << "First run:" << settings.contains("firstRun") << settings.value("firstRun", true); // Delete Interface.ini.lock file if it exists, otherwise Interface freezes. - QSettings settings; QString settingsLockFilename = settings.fileName() + ".lock"; QFile settingsLockFile(settingsLockFilename); if (settingsLockFile.exists()) { bool deleted = settingsLockFile.remove(); qCDebug(shared) << (deleted ? "Deleted" : "Failed to delete") << "settings lock file" << settingsLockFilename; } - } - - // Sets up the settings private instance. Should only be run once at startup. preInit() must be run beforehand, - void init() { + + // Let's set up the settings Private instance on its own thread QThread* thread = new QThread(); Q_CHECK_PTR(thread); diff --git a/libraries/shared/src/SettingInterface.h b/libraries/shared/src/SettingInterface.h index 5e23d42223..082adf3e54 100644 --- a/libraries/shared/src/SettingInterface.h +++ b/libraries/shared/src/SettingInterface.h @@ -20,14 +20,11 @@ namespace Setting { class Manager; - void preInit(); void init(); void cleanupSettings(); class Interface { public: - static const QString FIRST_RUN; - const QString& getKey() const { return _key; } bool isSet() const { return _isSet; } diff --git a/libraries/shared/src/SettingManager.cpp b/libraries/shared/src/SettingManager.cpp index a42e62c1c8..929fe2b0ff 100644 --- a/libraries/shared/src/SettingManager.cpp +++ b/libraries/shared/src/SettingManager.cpp @@ -9,12 +9,13 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "SettingManager.h" + #include #include #include #include "SettingInterface.h" -#include "SettingManager.h" namespace Setting { @@ -32,7 +33,6 @@ namespace Setting { // Custom deleter does nothing, because we need to shutdown later than the dependency manager void Manager::customDeleter() { } - void Manager::registerHandle(Interface* handle) { const QString& key = handle->getKey(); withWriteLock([&] { From e5d54fc6bc76b32e0f7a69e85d073ab321a45aac Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 14 Sep 2016 13:25:37 -0700 Subject: [PATCH 2/6] Move helpers to their own file --- libraries/script-engine/src/ScriptEngines.cpp | 37 --- libraries/shared/src/SettingHelpers.cpp | 284 ++++++++++++++++++ libraries/shared/src/SettingHelpers.h | 35 +++ libraries/shared/src/SettingInterface.cpp | 274 +---------------- 4 files changed, 323 insertions(+), 307 deletions(-) create mode 100644 libraries/shared/src/SettingHelpers.cpp create mode 100644 libraries/shared/src/SettingHelpers.h diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index cb6291a8dc..b3092be55a 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -283,43 +283,6 @@ void ScriptEngines::loadScripts() { // loads all saved scripts Settings settings; - - - // START of backward compatibility code - // This following if statement is only meant to update the settings file still using the old setting key. - // If you read that comment and it has been more than a couple months since it was merged, - // then by all means, feel free to remove it. - if (!settings.childGroups().contains(SETTINGS_KEY)) { - qWarning() << "Detected old script settings config, loading from previous location"; - const QString oldKey = "Settings"; - - // Load old scripts array from settings - int size = settings.beginReadArray(oldKey); - for (int i = 0; i < size; ++i) { - settings.setArrayIndex(i); - QString string = settings.value("script").toString(); - if (!string.isEmpty()) { - loadScript(string); - } - } - settings.endArray(); - - // Cleanup old scripts array from settings - settings.beginWriteArray(oldKey); - for (int i = 0; i < size; ++i) { - settings.setArrayIndex(i); - settings.remove(""); - } - settings.endArray(); - settings.beginGroup(oldKey); - settings.remove("size"); - settings.endGroup(); - - return; - } - // END of backward compatibility code - - int size = settings.beginReadArray(SETTINGS_KEY); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); diff --git a/libraries/shared/src/SettingHelpers.cpp b/libraries/shared/src/SettingHelpers.cpp new file mode 100644 index 0000000000..2ce23b6cee --- /dev/null +++ b/libraries/shared/src/SettingHelpers.cpp @@ -0,0 +1,284 @@ +// +// SettingHelpers.cpp +// libraries/shared/src +// +// Created by Clement on 9/13/16. +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "SettingHelpers.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document); +QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map); + +bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map) { + QJsonParseError jsonParseError; + + auto bytesRead = device.readAll(); + auto document = QJsonDocument::fromJson(bytesRead, &jsonParseError); + + if (jsonParseError.error != QJsonParseError::NoError) { + qDebug() << "Error parsing QSettings file:" << jsonParseError.errorString(); + return false; + } + + map = jsonDocumentToVariantMap(document); + + return true; +} + +bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map) { + auto document = variantMapToJsonDocument(map); + auto jsonByteArray = document.toJson(QJsonDocument::Indented); + auto bytesWritten = device.write(jsonByteArray); + return bytesWritten == jsonByteArray.size(); +} + +void loadOldINIFile(QSettings& settings) { + QSettings::setDefaultFormat(QSettings::IniFormat); + + QSettings iniSettings; + if (!iniSettings.allKeys().isEmpty()) { + qDebug() << "No data in json settings file, trying to load old ini settings file."; + + for (auto key : iniSettings.allKeys()) { + auto variant = iniSettings.value(key); + + if (variant.type() == QVariant::String) { + auto string = variant.toString(); + if (string == "true") { + variant = true; + } else if (string == "false") { + variant = false; + } else { + bool ok; + double value = string.toDouble(&ok); + if (ok) { + variant = value; + } + } + } + settings.setValue(key, variant); + } + + qDebug() << "Loaded" << settings.allKeys().size() << "keys from ini settings file."; + } + + QSettings::setDefaultFormat(JSON_FORMAT); +} + +QStringList splitArgs(const QString& string, int idx) { + int length = string.length(); + Q_ASSERT(length > 0); + Q_ASSERT(string.at(idx) == QLatin1Char('(')); + Q_ASSERT(string.at(length - 1) == QLatin1Char(')')); + + QStringList result; + QString item; + + for (++idx; idx < length; ++idx) { + QChar c = string.at(idx); + if (c == QLatin1Char(')')) { + Q_ASSERT(idx == length - 1); + result.append(item); + } else if (c == QLatin1Char(' ')) { + result.append(item); + item.clear(); + } else { + item.append(c); + } + } + + return result; +} + +QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) { + qDebug() << Q_FUNC_INFO << map.size() << "in map"; + + QJsonObject object; + for (auto it = map.cbegin(); it != map.cend(); ++it) { + auto& key = it.key(); + auto& variant = it.value(); + auto variantType = variant.type(); + + // Switch some types so they are readable/modifiable in the json file + if (variantType == QVariant(1.0f).type()) { // float + variantType = QVariant::Double; + } + if (variantType == QVariant((quint16)0).type()) { // uint16 + variantType = QVariant::UInt; + } + + switch (variantType) { + case QVariant::Map: + case QVariant::List: + case QVariant::Hash: { + qCritical() << "Unsupported variant type" << variant.typeName(); + Q_ASSERT(false); + break; + } + + case QVariant::Invalid: + object.insert(key, QJsonValue()); + break; + case QVariant::LongLong: + case QVariant::ULongLong: + case QVariant::Int: + case QVariant::UInt: + case QVariant::Bool: + case QVariant::Double: + object.insert(key, QJsonValue::fromVariant(variant)); + break; + + case QVariant::String: { + QString result = variant.toString(); + if (result.startsWith(QLatin1Char('@'))) { + result.prepend(QLatin1Char('@')); + } + object.insert(key, result); + break; + } + + case QVariant::ByteArray: { + QByteArray a = variant.toByteArray(); + QString result = QLatin1String("@ByteArray("); + result += QString::fromLatin1(a.constData(), a.size()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + case QVariant::Rect: { + QRect r = qvariant_cast(variant); + QString result = QLatin1String("@Rect("); + result += QString::number(r.x()); + result += QLatin1Char(' '); + result += QString::number(r.y()); + result += QLatin1Char(' '); + result += QString::number(r.width()); + result += QLatin1Char(' '); + result += QString::number(r.height()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + case QVariant::Size: { + QSize s = qvariant_cast(variant); + QString result = QLatin1String("@Size("); + result += QString::number(s.width()); + result += QLatin1Char(' '); + result += QString::number(s.height()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + case QVariant::Point: { + QPoint p = qvariant_cast(variant); + QString result = QLatin1String("@Point("); + result += QString::number(p.x()); + result += QLatin1Char(' '); + result += QString::number(p.y()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + + default: { + QByteArray array; + { + QDataStream stream(&array, QIODevice::WriteOnly); + stream.setVersion(QDataStream::Qt_4_0); + stream << variant; + } + + QString result = QLatin1String("@Variant("); + result += QString::fromLatin1(array.constData(), array.size()); + result += QLatin1Char(')'); + object.insert(key, result); + break; + } + } + } + + qDebug() << Q_FUNC_INFO << object.size() << "in json"; + + return QJsonDocument(object); +} + + +QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document) { + if (!document.isObject()) { + qWarning() << "Settings file does not contain a JSON object"; + return QSettings::SettingsMap(); + } + auto object = document.object(); + qDebug() << Q_FUNC_INFO << object.size() << "in json"; + QSettings::SettingsMap map; + + for (auto it = object.begin(); it != object.end(); ++it) { + + QVariant result; + + if (!it->isString()) { + result = it->toVariant(); + } else { + auto string = it->toString(); + + if (string.startsWith(QLatin1String("@@"))) { + result = QVariant(string.mid(1)); + + } else if (string.startsWith(QLatin1Char('@'))) { + + if (string.endsWith(QLatin1Char(')'))) { + + if (string.startsWith(QLatin1String("@ByteArray("))) { + result = QVariant(string.toLatin1().mid(11, string.size() - 12)); + + } else if (string.startsWith(QLatin1String("@Variant("))) { + QByteArray a(string.toLatin1().mid(9)); + QDataStream stream(&a, QIODevice::ReadOnly); + stream.setVersion(QDataStream::Qt_4_0); + stream >> result; + + } else if (string.startsWith(QLatin1String("@Rect("))) { + QStringList args = splitArgs(string, 5); + if (args.size() == 4) { + result = QRect(args[0].toInt(), args[1].toInt(), + args[2].toInt(), args[3].toInt()); + } + + } else if (string.startsWith(QLatin1String("@Size("))) { + QStringList args = splitArgs(string, 5); + if (args.size() == 2) { + result = QSize(args[0].toInt(), args[1].toInt()); + } + + } else if (string.startsWith(QLatin1String("@Point("))) { + QStringList args = splitArgs(string, 6); + if (args.size() == 2) { + result = QPoint(args[0].toInt(), args[1].toInt()); + } + } + } + } + } + + map.insert(it.key(), result); + } + + qDebug() << Q_FUNC_INFO << map.size() << "in map"; + return map; +} diff --git a/libraries/shared/src/SettingHelpers.h b/libraries/shared/src/SettingHelpers.h new file mode 100644 index 0000000000..c2f270f5b5 --- /dev/null +++ b/libraries/shared/src/SettingHelpers.h @@ -0,0 +1,35 @@ +// +// SettingHelpers.h +// libraries/shared/src +// +// Created by Clement on 9/13/16. +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_SettingHelpers_h +#define hifi_SettingHelpers_h + + + + +#include +#include +#include +#include +#include +#include +#include +#include + +bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map); +bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map); + +static const auto JSON_FORMAT = QSettings::registerFormat("json", readJSONFile, writeJSONFile); + +void loadOldINIFile(QSettings& settings); + + +#endif // hifi_SettingHelpers_h diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index 1267147b7e..21c0d7c721 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -17,245 +17,11 @@ #include #include "PathUtils.h" +#include "SettingHelpers.h" #include "SettingManager.h" #include "SharedLogging.h" -#include -#include -#include -#include -#include -#include -#include -#include - -QStringList splitArgs(const QString& string, int idx) { - int length = string.length(); - Q_ASSERT(length > 0); - Q_ASSERT(string.at(idx) == QLatin1Char('(')); - Q_ASSERT(string.at(length - 1) == QLatin1Char(')')); - - QStringList result; - QString item; - - for (++idx; idx < length; ++idx) { - QChar c = string.at(idx); - if (c == QLatin1Char(')')) { - Q_ASSERT(idx == length - 1); - result.append(item); - } else if (c == QLatin1Char(' ')) { - result.append(item); - item.clear(); - } else { - item.append(c); - } - } - - return result; -} - -QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) { - qDebug() << Q_FUNC_INFO << map.size() << "in map"; - - QJsonObject object; - for (auto it = map.cbegin(); it != map.cend(); ++it) { - auto& key = it.key(); - auto& variant = it.value(); - auto variantType = variant.type(); - - // Switch some types so they are readable/modifiable in the json file - if (variantType == QVariant(1.0f).type()) { // float - variantType = QVariant::Double; - } - if (variantType == QVariant((quint16)0).type()) { // uint16 - variantType = QVariant::UInt; - } - - switch (variantType) { - case QVariant::Map: - case QVariant::List: - case QVariant::Hash: { - qCritical() << "Unsupported variant type" << variant.typeName(); - Q_ASSERT(false); - break; - } - - case QVariant::Invalid: - object.insert(key, QJsonValue()); - break; - case QVariant::LongLong: - case QVariant::ULongLong: - case QVariant::Int: - case QVariant::UInt: - case QVariant::Bool: - case QVariant::Double: - object.insert(key, QJsonValue::fromVariant(variant)); - break; - - case QVariant::String: { - QString result = variant.toString(); - if (result.startsWith(QLatin1Char('@'))) { - result.prepend(QLatin1Char('@')); - } - object.insert(key, result); - break; - } - - case QVariant::ByteArray: { - QByteArray a = variant.toByteArray(); - QString result = QLatin1String("@ByteArray("); - result += QString::fromLatin1(a.constData(), a.size()); - result += QLatin1Char(')'); - object.insert(key, result); - break; - } - case QVariant::Rect: { - QRect r = qvariant_cast(variant); - QString result = QLatin1String("@Rect("); - result += QString::number(r.x()); - result += QLatin1Char(' '); - result += QString::number(r.y()); - result += QLatin1Char(' '); - result += QString::number(r.width()); - result += QLatin1Char(' '); - result += QString::number(r.height()); - result += QLatin1Char(')'); - object.insert(key, result); - break; - } - case QVariant::Size: { - QSize s = qvariant_cast(variant); - QString result = QLatin1String("@Size("); - result += QString::number(s.width()); - result += QLatin1Char(' '); - result += QString::number(s.height()); - result += QLatin1Char(')'); - object.insert(key, result); - break; - } - case QVariant::Point: { - QPoint p = qvariant_cast(variant); - QString result = QLatin1String("@Point("); - result += QString::number(p.x()); - result += QLatin1Char(' '); - result += QString::number(p.y()); - result += QLatin1Char(')'); - object.insert(key, result); - break; - } - - default: { - QByteArray array; - { - QDataStream stream(&array, QIODevice::WriteOnly); - stream.setVersion(QDataStream::Qt_4_0); - stream << variant; - } - - QString result = QLatin1String("@Variant("); - result += QString::fromLatin1(array.constData(), array.size()); - result += QLatin1Char(')'); - object.insert(key, result); - break; - } - } - } - - qDebug() << Q_FUNC_INFO << object.size() << "in json"; - - return QJsonDocument(object); -} - - -QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document) { - if (!document.isObject()) { - qWarning() << "Settings file does not contain a JSON object"; - return QSettings::SettingsMap(); - } - auto object = document.object(); - qDebug() << Q_FUNC_INFO << object.size() << "in json"; - QSettings::SettingsMap map; - - for (auto it = object.begin(); it != object.end(); ++it) { - - QVariant result; - - if (!it->isString()) { - result = it->toVariant(); - } else { - auto string = it->toString(); - - if (string.startsWith(QLatin1String("@@"))) { - result = QVariant(string.mid(1)); - - } else if (string.startsWith(QLatin1Char('@'))) { - - if (string.endsWith(QLatin1Char(')'))) { - - if (string.startsWith(QLatin1String("@ByteArray("))) { - result = QVariant(string.toLatin1().mid(11, string.size() - 12)); - - } else if (string.startsWith(QLatin1String("@Variant("))) { - QByteArray a(string.toLatin1().mid(9)); - QDataStream stream(&a, QIODevice::ReadOnly); - stream.setVersion(QDataStream::Qt_4_0); - stream >> result; - - } else if (string.startsWith(QLatin1String("@Rect("))) { - QStringList args = splitArgs(string, 5); - if (args.size() == 4) { - result = QRect(args[0].toInt(), args[1].toInt(), - args[2].toInt(), args[3].toInt()); - } - - } else if (string.startsWith(QLatin1String("@Size("))) { - QStringList args = splitArgs(string, 5); - if (args.size() == 2) { - result = QSize(args[0].toInt(), args[1].toInt()); - } - - } else if (string.startsWith(QLatin1String("@Point("))) { - QStringList args = splitArgs(string, 6); - if (args.size() == 2) { - result = QPoint(args[0].toInt(), args[1].toInt()); - } - } - } - } - } - - map.insert(it.key(), result); - } - - qDebug() << Q_FUNC_INFO << map.size() << "in map"; - return map; -} - -bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map) { - QJsonParseError jsonParseError; - - auto bytesRead = device.readAll(); - auto document = QJsonDocument::fromJson(bytesRead, &jsonParseError); - - if (jsonParseError.error != QJsonParseError::NoError) { - qDebug() << "Error parsing QSettings file:" << jsonParseError.errorString(); - return false; - } - - map = jsonDocumentToVariantMap(document); - - return true; -} -bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map) { - auto document = variantMapToJsonDocument(map); - auto jsonByteArray = document.toJson(QJsonDocument::Indented); - auto bytesWritten = device.write(jsonByteArray); - return bytesWritten == jsonByteArray.size(); -} - -const auto jsonFormat = QSettings::registerFormat("json", readJSONFile, writeJSONFile); - namespace Setting { static QSharedPointer globalManager; @@ -279,45 +45,13 @@ namespace Setting { // Sets up the settings private instance. Should only be run once at startup. preInit() must be run beforehand, void init() { // Set settings format - QSettings::setDefaultFormat(jsonFormat); + QSettings::setDefaultFormat(JSON_FORMAT); QSettings settings; - if (settings.allKeys().size() == 0) { - - QSettings::setDefaultFormat(QSettings::IniFormat); - QSettings iniSettings; - if (iniSettings.allKeys().size()) { - qDebug() << "No data in json settings file, trying to load old ini settings file."; - - for (auto key : iniSettings.allKeys()) { - auto variant = iniSettings.value(key); - - if (variant.type() == QVariant::String) { - auto string = variant.toString(); - if (string == "true") { - variant = true; - } else if (string == "false") { - variant = false; - } else { - bool ok; - double value = string.toDouble(&ok); - if (ok) { - variant = value; - } - } - } - settings.setValue(key, variant); - } - - qDebug() << "Loaded" << settings.allKeys().size() << "keys from ini settings file."; - } - - QSettings::setDefaultFormat(jsonFormat); + if (settings.allKeys().isEmpty()) { + loadOldINIFile(settings); } - - qDebug() << "First run:" << settings.contains("firstRun") << settings.value("firstRun", true); - // Delete Interface.ini.lock file if it exists, otherwise Interface freezes. QString settingsLockFilename = settings.fileName() + ".lock"; QFile settingsLockFile(settingsLockFilename); From cc574c3e05059fd82eccbaf4c241e0214ccb531b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 14 Sep 2016 15:09:38 -0700 Subject: [PATCH 3/6] Fix string mishandling --- libraries/shared/src/SettingHandle.cpp | 2 +- libraries/shared/src/SettingHelpers.cpp | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/libraries/shared/src/SettingHandle.cpp b/libraries/shared/src/SettingHandle.cpp index 4a0ff9df71..626d7e7ef5 100644 --- a/libraries/shared/src/SettingHandle.cpp +++ b/libraries/shared/src/SettingHandle.cpp @@ -49,7 +49,7 @@ bool Settings::contains(const QString& key) const { return _manager->contains(key); } -int Settings::beginReadArray(const QString & prefix) { +int Settings::beginReadArray(const QString& prefix) { return _manager->beginReadArray(prefix); } diff --git a/libraries/shared/src/SettingHelpers.cpp b/libraries/shared/src/SettingHelpers.cpp index 2ce23b6cee..f7d2510458 100644 --- a/libraries/shared/src/SettingHelpers.cpp +++ b/libraries/shared/src/SettingHelpers.cpp @@ -107,8 +107,6 @@ QStringList splitArgs(const QString& string, int idx) { } QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) { - qDebug() << Q_FUNC_INFO << map.size() << "in map"; - QJsonObject object; for (auto it = map.cbegin(); it != map.cend(); ++it) { auto& key = it.key(); @@ -122,6 +120,9 @@ QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) { if (variantType == QVariant((quint16)0).type()) { // uint16 variantType = QVariant::UInt; } + if (variantType == QVariant::Url) { // QUrl + variantType = QVariant::String; + } switch (variantType) { case QVariant::Map: @@ -213,8 +214,6 @@ QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map) { } } - qDebug() << Q_FUNC_INFO << object.size() << "in json"; - return QJsonDocument(object); } @@ -225,7 +224,6 @@ QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document) { return QSettings::SettingsMap(); } auto object = document.object(); - qDebug() << Q_FUNC_INFO << object.size() << "in json"; QSettings::SettingsMap map; for (auto it = object.begin(); it != object.end(); ++it) { @@ -237,10 +235,10 @@ QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document) { } else { auto string = it->toString(); - if (string.startsWith(QLatin1String("@@"))) { + if (string.startsWith(QLatin1String("@@"))) { // Standard string starting with '@' result = QVariant(string.mid(1)); - } else if (string.startsWith(QLatin1Char('@'))) { + } else if (string.startsWith(QLatin1Char('@'))) { // Custom type to string if (string.endsWith(QLatin1Char(')'))) { @@ -273,12 +271,13 @@ QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document) { } } } + } else { // Standard string + result = string; } } map.insert(it.key(), result); } - qDebug() << Q_FUNC_INFO << map.size() << "in map"; return map; } From d5429e76daedef304419dab4af9f138134c20c7e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 22 Sep 2016 17:01:04 -0700 Subject: [PATCH 4/6] Warnings fixes and cleanup --- domain-server/src/DomainServerSettingsManager.cpp | 2 +- domain-server/src/DomainServerSettingsManager.h | 3 +++ interface/src/avatar/MyAvatar.cpp | 1 - interface/src/main.cpp | 2 +- libraries/animation/src/Rig.cpp | 4 ---- libraries/shared/src/SettingInterface.cpp | 2 -- tests/render-perf/src/main.cpp | 1 + tests/render-texture-load/src/GLIHelpers.cpp | 2 +- tests/render-utils/src/main.cpp | 1 - 9 files changed, 7 insertions(+), 11 deletions(-) diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index 50e0efc9fa..6a9d908c37 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -42,7 +42,7 @@ const QString DESCRIPTION_COLUMNS_KEY = "columns"; const QString SETTINGS_VIEWPOINT_KEY = "viewpoint"; -static const Setting::Handle JSON_SETTING_VERSION("json-settings/version", 0.0); +static Setting::Handle JSON_SETTING_VERSION("json-settings/version", 0.0); DomainServerSettingsManager::DomainServerSettingsManager() : _descriptionArray(), diff --git a/domain-server/src/DomainServerSettingsManager.h b/domain-server/src/DomainServerSettingsManager.h index c067377ffc..6012e6706c 100644 --- a/domain-server/src/DomainServerSettingsManager.h +++ b/domain-server/src/DomainServerSettingsManager.h @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -21,6 +22,8 @@ #include #include "NodePermissions.h" +#include + const QString SETTINGS_PATHS_KEY = "paths"; const QString SETTINGS_PATH = "/settings"; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 19346e51db..90d7cf4665 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -57,7 +57,6 @@ using namespace std; -const glm::vec3 DEFAULT_UP_DIRECTION(0.0f, 1.0f, 0.0f); const float DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES = 30.0f; const float MAX_WALKING_SPEED = 2.6f; // human walking speed diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 85a630ee07..53b81578b6 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -30,7 +31,6 @@ #include "MainWindow.h" #include -#include #ifdef HAS_BUGSPLAT #include #include diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 877c6c3e91..94410470ce 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -956,10 +956,6 @@ void Rig::updateFromEyeParameters(const EyeParameters& params) { params.worldHeadOrientation, params.eyeLookAt, params.eyeSaccade); } -static const glm::vec3 X_AXIS(1.0f, 0.0f, 0.0f); -static const glm::vec3 Y_AXIS(0.0f, 1.0f, 0.0f); -static const glm::vec3 Z_AXIS(0.0f, 0.0f, 1.0f); - void Rig::computeHeadNeckAnimVars(const AnimPose& hmdPose, glm::vec3& headPositionOut, glm::quat& headOrientationOut, glm::vec3& neckPositionOut, glm::quat& neckOrientationOut) const { diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index 21c0d7c721..dd2b2fc595 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -21,8 +21,6 @@ #include "SettingManager.h" #include "SharedLogging.h" - - namespace Setting { static QSharedPointer globalManager; diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 8abb9f54e5..37983f178d 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/tests/render-texture-load/src/GLIHelpers.cpp b/tests/render-texture-load/src/GLIHelpers.cpp index 8067993b49..be39e7f1c8 100644 --- a/tests/render-texture-load/src/GLIHelpers.cpp +++ b/tests/render-texture-load/src/GLIHelpers.cpp @@ -48,7 +48,7 @@ QString convertTexture(const QString& sourceFile) { fromQImageFormat(sourceImage.format()), gli::extent2d(sourceImage.width(), sourceImage.height())); auto sourceSize = sourceImage.byteCount(); - assert(sourceSize == workTexture[workTexture.base_level()].size()); + assert(sourceSize == (int)workTexture[workTexture.base_level()].size()); memcpy(workTexture[workTexture.base_level()].data(), sourceImage.constBits(), sourceSize); QString resultFile = getKtxFileName(sourceFile) ; diff --git a/tests/render-utils/src/main.cpp b/tests/render-utils/src/main.cpp index c38bd6765c..7e909bf31f 100644 --- a/tests/render-utils/src/main.cpp +++ b/tests/render-utils/src/main.cpp @@ -152,7 +152,6 @@ protected: //static const wchar_t* EXAMPLE_TEXT = L"Hello"; //static const wchar_t* EXAMPLE_TEXT = L"\xC1y Hello 1.0\ny\xC1 line 2\n\xC1y"; -static const glm::uvec2 QUAD_OFFSET(10, 10); void testShaderBuild(const char* vs_src, const char * fs_src) { auto vs = gpu::Shader::createVertex(std::string(vs_src)); From 5bae69bb51ad1a12cce0fe99c503e0d0418cf6ac Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 4 Oct 2016 15:33:09 -0700 Subject: [PATCH 5/6] Fix DS --- domain-server/src/DomainServer.cpp | 6 ------ domain-server/src/main.cpp | 6 ++++++ libraries/shared/src/SettingInterface.cpp | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 0f4e62c52d..b7487a2b4c 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -79,13 +79,7 @@ DomainServer::DomainServer(int argc, char* argv[]) : connect(this, &QCoreApplication::aboutToQuit, this, &DomainServer::aboutToQuit); - setApplicationName(BuildInfo::DOMAIN_SERVER_NAME); - setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); - setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); - setApplicationVersion(BuildInfo::VERSION); - qDebug() << "Setting up domain-server"; - qDebug() << "[VERSION] Build sequence:" << qPrintable(applicationVersion()); qDebug() << "[VERSION] MODIFIED_ORGANIZATION:" << BuildInfo::MODIFIED_ORGANIZATION; qDebug() << "[VERSION] VERSION:" << BuildInfo::VERSION; diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index b3b5c8b9be..94d05fff90 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -19,12 +19,18 @@ #include #include +#include #include "DomainServer.h" int main(int argc, char* argv[]) { disableQtBearerPoll(); // Fixes wifi ping spikes + QCoreApplication::setApplicationName(BuildInfo::DOMAIN_SERVER_NAME); + QCoreApplication::setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); + QCoreApplication::setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); + QCoreApplication::setApplicationVersion(BuildInfo::VERSION); + #ifndef WIN32 setvbuf(stdout, NULL, _IOLBF, 0); #endif diff --git a/libraries/shared/src/SettingInterface.cpp b/libraries/shared/src/SettingInterface.cpp index dd2b2fc595..01b9f3884f 100644 --- a/libraries/shared/src/SettingInterface.cpp +++ b/libraries/shared/src/SettingInterface.cpp @@ -45,6 +45,7 @@ namespace Setting { // Set settings format QSettings::setDefaultFormat(JSON_FORMAT); QSettings settings; + qCDebug(shared) << "Settings file:" << settings.fileName(); if (settings.allKeys().isEmpty()) { loadOldINIFile(settings); From 36bd9ef4e6db4801056c1b49be10c7aa0c7951ce Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 12 Oct 2016 10:57:14 -0700 Subject: [PATCH 6/6] Update new ACClientApp code --- assignment-client/src/AssignmentClientApp.cpp | 6 ------ assignment-client/src/main.cpp | 6 ++++++ cmake/templates/BuildInfo.h.in | 1 + libraries/shared/src/SettingHelpers.h | 10 ---------- tools/ac-client/src/ACClientApp.cpp | 3 +-- tools/ac-client/src/main.cpp | 8 ++++++++ 6 files changed, 16 insertions(+), 18 deletions(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index cd46731acc..daa3896505 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include @@ -40,11 +39,6 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : ShutdownEventListener::getInstance(); # endif - setApplicationName(BuildInfo::ASSIGNMENT_CLIENT_NAME); - setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); - setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); - setApplicationVersion(BuildInfo::VERSION); - // use the verbose message handler in Logging qInstallMessageHandler(LogHandler::verboseMessageHandler); diff --git a/assignment-client/src/main.cpp b/assignment-client/src/main.cpp index 052c4755f8..98810e2ce1 100644 --- a/assignment-client/src/main.cpp +++ b/assignment-client/src/main.cpp @@ -14,10 +14,16 @@ #include #include "AssignmentClientApp.h" +#include int main(int argc, char* argv[]) { disableQtBearerPoll(); // Fixes wifi ping spikes + QCoreApplication::setApplicationName(BuildInfo::ASSIGNMENT_CLIENT_NAME); + QCoreApplication::setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); + QCoreApplication::setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); + QCoreApplication::setApplicationVersion(BuildInfo::VERSION); + AssignmentClientApp app(argc, argv); int acReturn = app.exec(); diff --git a/cmake/templates/BuildInfo.h.in b/cmake/templates/BuildInfo.h.in index 579f2dc1d7..b0af1c0524 100644 --- a/cmake/templates/BuildInfo.h.in +++ b/cmake/templates/BuildInfo.h.in @@ -20,6 +20,7 @@ namespace BuildInfo { const QString INTERFACE_NAME = "Interface"; const QString ASSIGNMENT_CLIENT_NAME = "assignment-client"; const QString DOMAIN_SERVER_NAME = "domain-server"; + const QString AC_CLIENT_SERVER_NAME = "ac-client"; const QString MODIFIED_ORGANIZATION = "@BUILD_ORGANIZATION@"; const QString ORGANIZATION_DOMAIN = "highfidelity.io"; const QString VERSION = "@BUILD_VERSION@"; diff --git a/libraries/shared/src/SettingHelpers.h b/libraries/shared/src/SettingHelpers.h index c2f270f5b5..122e56957c 100644 --- a/libraries/shared/src/SettingHelpers.h +++ b/libraries/shared/src/SettingHelpers.h @@ -12,17 +12,7 @@ #ifndef hifi_SettingHelpers_h #define hifi_SettingHelpers_h - - - #include -#include -#include -#include -#include -#include -#include -#include bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map); bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map); diff --git a/tools/ac-client/src/ACClientApp.cpp b/tools/ac-client/src/ACClientApp.cpp index dad0a6d617..4c12a09388 100644 --- a/tools/ac-client/src/ACClientApp.cpp +++ b/tools/ac-client/src/ACClientApp.cpp @@ -81,9 +81,8 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : listenPort = parser.value(listenPortOption).toInt(); } - Setting::preInit(); - DependencyManager::registerInheritance(); Setting::init(); + DependencyManager::registerInheritance(); DependencyManager::set([&]{ return QString("Mozilla/5.0 (HighFidelityACClient)"); }); DependencyManager::set(); diff --git a/tools/ac-client/src/main.cpp b/tools/ac-client/src/main.cpp index 918df6413f..12c5e6f5f8 100644 --- a/tools/ac-client/src/main.cpp +++ b/tools/ac-client/src/main.cpp @@ -13,11 +13,19 @@ #include #include +#include + #include "ACClientApp.h" using namespace std; int main(int argc, char * argv[]) { + QCoreApplication::setApplicationName(BuildInfo::AC_CLIENT_SERVER_NAME); + QCoreApplication::setOrganizationName(BuildInfo::MODIFIED_ORGANIZATION); + QCoreApplication::setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); + QCoreApplication::setApplicationVersion(BuildInfo::VERSION); + ACClientApp app(argc, argv); + return app.exec(); }