forked from aya/aya
Initial commit
This commit is contained in:
136
client/common/AppSettings.cpp
Normal file
136
client/common/AppSettings.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
#include "AppSettings.hpp"
|
||||
#include <QString>
|
||||
|
||||
#ifndef SKIP_APP_SETTINGS_LOADING
|
||||
#include "Utility/StandardOut.hpp"
|
||||
#include "Utility/Statistics.hpp"
|
||||
#endif // SKIP_APP_SETTINGS_LOADING
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <filesystem>
|
||||
|
||||
static const char* kAppSettingsFileName = "AppSettings.ini";
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
AppSettings::AppSettings(const std::string& appDir)
|
||||
: m_pSettings(nullptr)
|
||||
{
|
||||
this->appDir = appDir;
|
||||
}
|
||||
|
||||
AppSettings::~AppSettings()
|
||||
{
|
||||
delete m_pSettings;
|
||||
}
|
||||
|
||||
bool AppSettings::load()
|
||||
{
|
||||
if (appDir.empty())
|
||||
return false;
|
||||
|
||||
delete m_pSettings;
|
||||
|
||||
std::string path = appDir + "/" + kAppSettingsFileName;
|
||||
|
||||
#ifndef SKIP_APP_SETTINGS_LOADING
|
||||
Aya::StandardOut::singleton()->printf(Aya::MESSAGE_SYSTEM, "Loading AppSettings from %s", path.c_str());
|
||||
#endif
|
||||
|
||||
m_pSettings = new QSettings(QString::fromStdString(appDir + "/" + kAppSettingsFileName), QSettings::IniFormat);
|
||||
|
||||
bool success = m_pSettings->status() == QSettings::NoError;
|
||||
|
||||
if (success)
|
||||
{
|
||||
m_pSettings->sync();
|
||||
m_pSettings->setFallbacksEnabled(true);
|
||||
|
||||
// hack for bootstrapper who can't deal with allat
|
||||
#ifndef SKIP_APP_SETTINGS_LOADING
|
||||
std::string assetFolder = get("Aya", "ContentFolder").value_or(appDir + "/content");
|
||||
SetAssetFolder(assetFolder);
|
||||
SetTrustCheckURL(get("Aya", "TrustCheckUrl").value_or(""));
|
||||
|
||||
if (GetTrustCheckURL().empty())
|
||||
SetUsingTrustCheck(false);
|
||||
|
||||
if (has("Aya", "InsecureMode"))
|
||||
{
|
||||
std::string insecureMode = get("Aya", "InsecureMode").value_or("false");
|
||||
boost::algorithm::to_lower(insecureMode);
|
||||
SetInsecureMode(insecureMode == "true" || insecureMode == "1" || insecureMode == "yes");
|
||||
}
|
||||
|
||||
if (has("Aya", "VerboseLogging"))
|
||||
{
|
||||
std::string verboseLogging = get("Aya", "VerboseLogging").value_or("false");
|
||||
boost::algorithm::to_lower(verboseLogging);
|
||||
SetVerboseLogging(verboseLogging == "true" || verboseLogging == "1" || verboseLogging == "yes");
|
||||
}
|
||||
|
||||
if (hasGroup("Instance"))
|
||||
{
|
||||
SetBaseURL(get("Instance", "BaseUrl").value_or(""));
|
||||
SetInstanceAccessKey(get("Instance", "AccessKey").value_or(""));
|
||||
}
|
||||
|
||||
if (GetBaseURL().empty())
|
||||
{
|
||||
SetUsingInstance(false);
|
||||
SetFetchLocalClientSettings(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetUsingInstance(true);
|
||||
SetFetchLocalClientSettings(false);
|
||||
}
|
||||
|
||||
if (hasGroup("MasterServer"))
|
||||
{
|
||||
SetMasterServerURL(get("MasterServer", "BaseUrl").value_or(""));
|
||||
SetMasterServerKey(get("MasterServer", "AccessKey").value_or(""));
|
||||
}
|
||||
|
||||
SetUsingMasterServer(!GetMasterServerURL().empty());
|
||||
#endif // SKIP_APP_SETTINGS_LOADING
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
std::optional<std::string> AppSettings::get(const std::string& group, const std::string& key) const
|
||||
{
|
||||
m_pSettings->beginGroup(QString::fromStdString(group));
|
||||
QVariant value = m_pSettings->value(QString::fromStdString(key));
|
||||
m_pSettings->endGroup();
|
||||
|
||||
if (value.isValid() && value.type() == QVariant::String)
|
||||
return value.toString().toStdString();
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
bool AppSettings::hasGroup(const std::string& group)
|
||||
{
|
||||
return m_pSettings->childGroups().contains(QString::fromStdString(group));
|
||||
}
|
||||
|
||||
bool AppSettings::has(const std::string& group, const std::string& key)
|
||||
{
|
||||
if (!this->hasGroup(group))
|
||||
return false;
|
||||
|
||||
m_pSettings->beginGroup(QString::fromStdString(group));
|
||||
QVariant value = m_pSettings->value(QString::fromStdString(key));
|
||||
m_pSettings->endGroup();
|
||||
|
||||
return value.isValid();
|
||||
}
|
||||
|
||||
void AppSettings::set(const std::string& group, const std::string& key, const std::string& value)
|
||||
{
|
||||
m_pSettings->beginGroup(QString::fromStdString(group));
|
||||
m_pSettings->setValue(QString::fromStdString(key), QString::fromStdString(value));
|
||||
m_pSettings->endGroup();
|
||||
}
|
||||
Reference in New Issue
Block a user