1
0
mirror of https://github.com/d47081/qBittorrent.git synced 2025-03-11 21:01:07 +00:00

Initialise QBtCommandLineParameters members from environment

This allows to pass options via environment variables. The variable name
is constructed from parameter name by transforming the name to upper
case and prefixing "QBT_".
This commit is contained in:
Eugene Shalygin 2016-05-10 14:49:19 +02:00
parent 0f746ffd5a
commit d5414631c3
2 changed files with 45 additions and 11 deletions

@ -33,7 +33,10 @@
#include "options.h" #include "options.h"
#include <iostream> #include <iostream>
#include <QDebug>
#include <QFileInfo> #include <QFileInfo>
#include <QProcessEnvironment>
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
#include <QMessageBox> #include <QMessageBox>
@ -41,26 +44,56 @@
#include "base/utils/misc.h" #include "base/utils/misc.h"
QBtCommandLineParameters::QBtCommandLineParameters() namespace
{
bool isBoolEnvVarSetToTrue(const QProcessEnvironment &env, const QString &var)
{
QString val = env.value(var);
// we accept "1" and "true" (upper or lower cased) as boolean 'true' values
return (val == QLatin1String("1") || val.toUpper() == QLatin1String("TRUE"));
}
int readIntlEnvVar(const QProcessEnvironment &env, const QString &var, int defaultValue)
{
QString val = env.value(var);
if (val.isEmpty()) return defaultValue;
bool ok;
int res = val.toInt(&ok);
if (!ok) {
qDebug() << QObject::tr("Expected integer number in environment variable '%1', but got '%2'")
.arg(var).arg(val);
return defaultValue;
}
return res;
}
QString envVarNameForParameter(const char *parameterName)
{
return QLatin1String("QBT_") +
QString(QLatin1String(parameterName)).toUpper().replace(QLatin1Char('-'), QLatin1Char('_'));
}
}
QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env)
: showHelp(false) : showHelp(false)
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
, showVersion(false) , showVersion(false)
#endif #endif
#ifndef DISABLE_GUI #ifndef DISABLE_GUI
, noSplash(false) , noSplash(isBoolEnvVarSetToTrue(env, envVarNameForParameter("no-splash")))
#else #else
, shouldDaemonize(false) , shouldDaemonize(isBoolEnvVarSetToTrue(env, envVarNameForParameter("daemon")))
#endif #endif
, webUiPort(-1) , webUiPort(readIntlEnvVar(env, envVarNameForParameter("webui-port"), -1))
, profileDir() , profileDir(env.value(envVarNameForParameter("profile")))
, portableMode(false) , portableMode(isBoolEnvVarSetToTrue(env, envVarNameForParameter("portable")))
, configurationName() , configurationName(env.value(envVarNameForParameter("configuration")))
{ {
} }
QBtCommandLineParameters parseCommandLine(const QStringList &args) QBtCommandLineParameters parseCommandLine(const QStringList &args)
{ {
QBtCommandLineParameters result; QBtCommandLineParameters result {QProcessEnvironment::systemEnvironment()};
for (int i = 1; i < args.count(); ++i) { for (int i = 1; i < args.count(); ++i) {
const QString &arg = args[i]; const QString &arg = args[i];
@ -178,7 +211,7 @@ QString makeUsage(const QString &prgName)
return text; return text;
} }
void displayUsage(const QString& prgName) void displayUsage(const QString &prgName)
{ {
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
std::cout << qPrintable(makeUsage(prgName)) << std::endl; std::cout << qPrintable(makeUsage(prgName)) << std::endl;
@ -189,4 +222,3 @@ void displayUsage(const QString& prgName)
msgBox.exec(); msgBox.exec();
#endif #endif
} }

@ -38,6 +38,8 @@
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
class QProcessEnvironment;
struct QBtCommandLineParameters struct QBtCommandLineParameters
{ {
bool showHelp; bool showHelp;
@ -56,7 +58,7 @@ struct QBtCommandLineParameters
QStringList torrents; QStringList torrents;
QString unknownParameter; QString unknownParameter;
QBtCommandLineParameters(); QBtCommandLineParameters(const QProcessEnvironment&);
}; };
class CommandLineParameterError: public std::runtime_error class CommandLineParameterError: public std::runtime_error