324 lines
8.4 KiB
C++
324 lines
8.4 KiB
C++
|
|
|
|
#include "nglsettings_settings.h"
|
|
#include "nglsettings_connections.h"
|
|
|
|
#include <ngltools/ngltools_filesystem.h>
|
|
|
|
#include <QtCore/QCoreApplication>
|
|
#include <QtCore/QDir>
|
|
#include <QtCore/QSettings>
|
|
#include <QtCore/QSize>
|
|
#include <QtCore/QStandardPaths>
|
|
|
|
namespace NGL
|
|
{
|
|
QSettings *Settings::s_globalSettings = nullptr;
|
|
|
|
Settings::Settings(const QString &iniFile_)
|
|
: m_settings(nullptr)
|
|
{
|
|
QString iniFile = iniFile_;
|
|
if (iniFile == QLatin1String("gfs_ws.ini"))
|
|
{
|
|
const QByteArray defUser = qgetenv("USER");
|
|
if (defUser == "ctc_aar" || defUser == "ctc_rbf")
|
|
{
|
|
QByteArray home = qgetenv("HOME");
|
|
if (!home.isEmpty())
|
|
{
|
|
QString fn = QString::fromLocal8Bit(home) + QLatin1String("/gfs_") + QString::fromLocal8Bit(defUser.mid(4)) + QLatin1String(".ini");
|
|
QFileInfo fi(fn);
|
|
if (fi.exists() && fi.isFile() && fi.isReadable())
|
|
{
|
|
iniFile = fn;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
initializeGlobalSettings();
|
|
|
|
initPre();
|
|
if (!iniFile.isEmpty())
|
|
{
|
|
if (QFileInfo(iniFile).isAbsolute())
|
|
m_settings = new QSettings(iniFile, QSettings::IniFormat);
|
|
else
|
|
m_settings = new QSettings(basePath() + iniFile, QSettings::IniFormat);
|
|
initPost();
|
|
}
|
|
|
|
if (!m_settings)
|
|
m_settings = new QSettings(QLatin1String("RDE"));
|
|
}
|
|
|
|
Settings::Settings(const QString &organization, const QString &application)
|
|
: m_settings(new QSettings(organization, application))
|
|
{
|
|
initPre();
|
|
initPost();
|
|
}
|
|
|
|
Settings::~Settings()
|
|
{
|
|
delete m_settings;
|
|
}
|
|
|
|
void Settings::initializeGlobalSettings()
|
|
{
|
|
if (s_globalSettings)
|
|
return;
|
|
|
|
if (!s_globalSettings)
|
|
{
|
|
QString globalSettingsFile = NGL::findProjectConfigFile();
|
|
|
|
|
|
if (!globalSettingsFile.isEmpty())
|
|
s_globalSettings = new QSettings(globalSettingsFile, QSettings::IniFormat);
|
|
}
|
|
if (!s_globalSettings)
|
|
s_globalSettings = new QSettings(QLatin1String("RDE"), QLatin1String("LTS-CC"));
|
|
Connections::setPortOffset(portOffset());
|
|
Connections::setServerHostname(serverHostname());
|
|
}
|
|
|
|
QString Settings::globalSectionName()
|
|
{
|
|
QString secName = QLatin1String("Global");
|
|
static const char envGlobSecName[] = "LTS_CONF_GLOBAL_SECTION_NAME";
|
|
if (qEnvironmentVariableIsSet(envGlobSecName))
|
|
secName = QString::fromLocal8Bit(qgetenv(envGlobSecName));
|
|
|
|
return secName;
|
|
}
|
|
|
|
QString Settings::basePath() const
|
|
{
|
|
return m_paths["GFS_PATH"];
|
|
}
|
|
|
|
QString Settings::tempPath() const
|
|
{
|
|
return m_paths["TMP_PATH"];
|
|
}
|
|
|
|
QString Settings::printPath()
|
|
{
|
|
return getDirectory("PDF", tempPath());
|
|
}
|
|
|
|
QString Settings::logoProject()
|
|
{
|
|
return QLatin1String(":project/logo.png");
|
|
}
|
|
|
|
QString Settings::bitmapPath()
|
|
{
|
|
return getDirectory("BITMAPS", basePath() + QLatin1String("DATA"));
|
|
}
|
|
|
|
QString Settings::zsks_rxPath()
|
|
{
|
|
return getDirectory("ZSKS_RX", tempPath());
|
|
}
|
|
|
|
QString Settings::zsks_txPath()
|
|
{
|
|
return getDirectory("ZSKS_TX", tempPath());
|
|
}
|
|
|
|
QString Settings::aarServerPath(int exerciseId)
|
|
{
|
|
return getDirectory(QByteArray::number(exerciseId), QString::fromLocal8Bit("/data/aar/"));
|
|
}
|
|
|
|
bool Settings::isDatabaseConnectionLocal()
|
|
{
|
|
return (databaseHostname() == QStringLiteral("localhost"));
|
|
}
|
|
|
|
QString Settings::databaseName()
|
|
{
|
|
initializeGlobalSettings();
|
|
|
|
return s_globalSettings->value(globalSectionName() + QLatin1String("/DatabaseName"), QLatin1String("lts_ets_pro")).toString();
|
|
}
|
|
|
|
QString Settings::databaseHostname()
|
|
{
|
|
initializeGlobalSettings();
|
|
return s_globalSettings->value(QLatin1String("Global/DatabaseHostname"), QLatin1String("EXCDBS01")).toString();
|
|
}
|
|
|
|
QString Settings::databaseUser()
|
|
{
|
|
#ifdef Q_OS_WIN
|
|
QByteArray defUser = qgetenv("USERNAME");
|
|
#else
|
|
QByteArray defUser = qgetenv("USER");
|
|
#endif
|
|
QString ret = m_settings->value(QLatin1String("db/user"), QString::fromLocal8Bit(defUser)).toString();
|
|
return ret;
|
|
}
|
|
|
|
QString Settings::databasePassword(const QString &databaseUser)
|
|
{
|
|
QString defaultPw = QStringLiteral("ctc11de");
|
|
if (!databaseUser.isEmpty())
|
|
{
|
|
const QStringList sl = databaseUser.split(QLatin1Char('_'));
|
|
if (!sl.isEmpty())
|
|
defaultPw = sl.at(0) + QStringLiteral("11de");
|
|
}
|
|
return m_settings->value(QLatin1String("db/passwd"), defaultPw).toString();
|
|
}
|
|
|
|
QString Settings::databaseDriver()
|
|
{
|
|
return m_settings->value(QLatin1String("db/driver"), QLatin1String("QPSQL")).toString();
|
|
}
|
|
|
|
int Settings::avsKeepAliveTimeout()
|
|
{
|
|
return m_settings->value(QLatin1String("avs/keepalivetimeout"), 20000).toInt();
|
|
}
|
|
|
|
QString Settings::avsServerHost()
|
|
{
|
|
return m_settings->value(QLatin1String("avs/serverhost"), QLatin1String("EXCAVS01")).toString();
|
|
}
|
|
|
|
quint16 Settings::avsServerPortAVE()
|
|
{
|
|
static const quint16 defaultPort = 6350;
|
|
bool bOk;
|
|
quint16 ret = m_settings->value(QLatin1String("avs/serverport_ave"), defaultPort).toUInt(&bOk);
|
|
return bOk ? ret : defaultPort;
|
|
}
|
|
|
|
QSettings *Settings::settings()
|
|
{
|
|
return m_settings;
|
|
}
|
|
|
|
const QSettings *Settings::settings() const
|
|
{
|
|
return m_settings;
|
|
}
|
|
|
|
QString Settings::fixupPath(const QString &_path) const
|
|
{
|
|
QString path = QDir::fromNativeSeparators(_path);
|
|
if (!QDir::isAbsolutePath(path))
|
|
path = basePath() + path;
|
|
path = QDir::cleanPath(path);
|
|
if (!path.endsWith(QLatin1Char('/')))
|
|
path += QLatin1Char('/');
|
|
return path;
|
|
}
|
|
|
|
QString Settings::getDirectory(const QByteArray &_dir, const QString &defPrefix, bool bPathLowercase)
|
|
{
|
|
if (m_paths[_dir].isEmpty())
|
|
{
|
|
const QString lowerDir = QString::fromLatin1(_dir.toLower());
|
|
const QString dir = bPathLowercase ? lowerDir : QString::fromLatin1(_dir);
|
|
QString def = defPrefix + QLatin1Char('/') + dir + QLatin1Char('/');
|
|
m_paths[_dir] = fixupPath(m_settings->value(QLatin1String("paths/") + lowerDir, def).toString());
|
|
QDir d(m_paths[_dir]);
|
|
if (!d.exists())
|
|
d.mkpath(d.absolutePath());
|
|
}
|
|
return m_paths[_dir];
|
|
}
|
|
|
|
void Settings::initPre()
|
|
{
|
|
#ifdef WIN32
|
|
QString path = QString::fromLocal8Bit(qgetenv("GFS_PATH"));
|
|
if (path.isEmpty())
|
|
path = QCoreApplication::applicationDirPath();
|
|
m_paths["GFS_PATH"] = fixupPath(path);
|
|
#else
|
|
QByteArray path = qgetenv("GFS_PATH");
|
|
if (path.isEmpty())
|
|
path = qgetenv("HOME");
|
|
m_paths["GFS_PATH"] = fixupPath(QString::fromLocal8Bit(path));
|
|
#endif
|
|
|
|
QByteArray tmppath = qgetenv("TMP_PATH");
|
|
if (tmppath.isEmpty())
|
|
tmppath = qgetenv("TMP");
|
|
if (tmppath.isEmpty())
|
|
tmppath = QDir::tempPath().toLocal8Bit();
|
|
m_paths["TMP_PATH"] = fixupPath(QString::fromLocal8Bit(tmppath));
|
|
}
|
|
|
|
void Settings::initPost()
|
|
{
|
|
NGL::Connections::setIniFile(m_settings->fileName());
|
|
}
|
|
|
|
int Settings::getInteger(const QString &key, int defVal) const
|
|
{
|
|
bool bOk;
|
|
int ret = m_settings->value(key, defVal).toInt(&bOk);
|
|
return bOk ? ret : defVal;
|
|
}
|
|
|
|
float Settings::getFloat(const QString &key, float defVal) const
|
|
{
|
|
bool bOk;
|
|
float ret = m_settings->value(key, defVal).toFloat(&bOk);
|
|
return bOk ? ret : defVal;
|
|
}
|
|
|
|
double Settings::getDouble(const QString &key, double defVal) const
|
|
{
|
|
bool bOk;
|
|
double ret = m_settings->value(key, defVal).toDouble(&bOk);
|
|
return bOk ? ret : defVal;
|
|
}
|
|
|
|
bool Settings::getBoolean(const QString &key, bool defVal) const
|
|
{
|
|
return m_settings->value(key, defVal).toBool();
|
|
}
|
|
|
|
QString Settings::getString(const QString &key, const QString &defVal) const
|
|
{
|
|
return m_settings->value(key, defVal).toString();
|
|
}
|
|
|
|
unsigned short Settings::domainId()
|
|
{
|
|
initializeGlobalSettings();
|
|
return s_globalSettings->value(QLatin1String("Global/DomainId"), 0).toUInt();
|
|
}
|
|
|
|
unsigned short Settings::portOffset()
|
|
{
|
|
initializeGlobalSettings();
|
|
return s_globalSettings->value(QLatin1String("Global/PortOffset"), 9000).toUInt();
|
|
}
|
|
|
|
QString Settings::serverHostname()
|
|
{
|
|
initializeGlobalSettings();
|
|
return s_globalSettings->value(QLatin1String("Global/ServerHostname"), QLatin1String("EXCTDS01")).toString();
|
|
}
|
|
|
|
QString Settings::logPath()
|
|
{
|
|
initializeGlobalSettings();
|
|
#ifdef WIN32
|
|
return s_globalSettings->value(QLatin1String("Global/LogPath"), QStandardPaths::writableLocation(QStandardPaths::TempLocation)).toString();
|
|
#else
|
|
return s_globalSettings->value(QLatin1String("Global/LogPath"), QLatin1String("/shd/CTC/LOG")).toString();
|
|
#endif
|
|
}
|
|
|
|
}
|