mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-16 02:03:07 -07:00
Don't enforce an explicit value for TriState cmd options.
Most code from Brian Kendall <guygizmo@gmail.com> (@briankendall)
This commit is contained in:
parent
706097ddda
commit
1a099fa742
1 changed files with 38 additions and 22 deletions
|
@ -242,45 +242,59 @@ namespace
|
||||||
|
|
||||||
// Option that is explicitly set to true or false, and whose value is undefined when unspecified.
|
// Option that is explicitly set to true or false, and whose value is undefined when unspecified.
|
||||||
// May not have a shortcut.
|
// May not have a shortcut.
|
||||||
class TriStateBoolOption: protected StringOption
|
class TriStateBoolOption: protected Option
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
constexpr TriStateBoolOption(const char *name)
|
constexpr TriStateBoolOption(const char *name, bool defaultValue)
|
||||||
: StringOption {name}
|
: Option {name, 0}
|
||||||
|
, m_defaultValue(defaultValue)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
using StringOption::operator==;
|
bool operator==(const QString &arg) const
|
||||||
|
{
|
||||||
|
QStringList parts = arg.split(QLatin1Char('='));
|
||||||
|
return parts[0] == fullParameter();
|
||||||
|
}
|
||||||
|
|
||||||
QString usage() const
|
QString usage() const
|
||||||
{
|
{
|
||||||
return StringOption::usage(QLatin1String("true|false"));
|
return padUsageText(fullParameter() + QLatin1String("=<true|false>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
TriStateBool value(const QString &arg) const
|
TriStateBool value(const QString &arg) const
|
||||||
{
|
{
|
||||||
QString val = StringOption::value(arg);
|
QStringList parts = arg.split(QLatin1Char('='));
|
||||||
|
|
||||||
if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) {
|
if (parts.size() == 1) {
|
||||||
return TriStateBool::True;
|
return TriStateBool(m_defaultValue);
|
||||||
}
|
}
|
||||||
else if (val.toUpper() == QLatin1String("FALSE") || val == QLatin1String("0")) {
|
else if (parts.size() == 2) {
|
||||||
return TriStateBool::False;
|
QString val = parts[1];
|
||||||
}
|
|
||||||
else {
|
if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) {
|
||||||
throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'",
|
return TriStateBool::True;
|
||||||
"e.g. Parameter '--add-paused' must follow syntax "
|
}
|
||||||
"'--add-paused=<true|false>'")
|
else if (val.toUpper() == QLatin1String("FALSE") || val == QLatin1String("0")) {
|
||||||
.arg(fullParameter())
|
return TriStateBool::False;
|
||||||
.arg(QLatin1String("<true|false>")));
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'",
|
||||||
|
"e.g. Parameter '--add-paused' must follow syntax "
|
||||||
|
"'--add-paused=<true|false>'")
|
||||||
|
.arg(fullParameter())
|
||||||
|
.arg(QLatin1String("<true|false>")));
|
||||||
}
|
}
|
||||||
|
|
||||||
TriStateBool value(const QProcessEnvironment &env) const
|
TriStateBool value(const QProcessEnvironment &env) const
|
||||||
{
|
{
|
||||||
QString val = env.value(envVarName());
|
QString val = env.value(envVarName(), "-1");
|
||||||
|
|
||||||
if (val.isEmpty()) {
|
if (val.isEmpty()) {
|
||||||
|
return TriStateBool(m_defaultValue);
|
||||||
|
}
|
||||||
|
else if (val == QLatin1String("-1")) {
|
||||||
return TriStateBool::Undefined;
|
return TriStateBool::Undefined;
|
||||||
}
|
}
|
||||||
else if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) {
|
else if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) {
|
||||||
|
@ -295,6 +309,8 @@ namespace
|
||||||
return TriStateBool::Undefined;
|
return TriStateBool::Undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool m_defaultValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool operator==(const QString &s, const TriStateBoolOption &o)
|
bool operator==(const QString &s, const TriStateBoolOption &o)
|
||||||
|
@ -315,12 +331,12 @@ namespace
|
||||||
constexpr const BoolOption PORTABLE_OPTION = {"portable"};
|
constexpr const BoolOption PORTABLE_OPTION = {"portable"};
|
||||||
constexpr const BoolOption RELATIVE_FASTRESUME = {"relative-fastresume"};
|
constexpr const BoolOption RELATIVE_FASTRESUME = {"relative-fastresume"};
|
||||||
constexpr const StringOption SAVE_PATH_OPTION = {"save-path"};
|
constexpr const StringOption SAVE_PATH_OPTION = {"save-path"};
|
||||||
constexpr const TriStateBoolOption PAUSED_OPTION = {"add-paused"};
|
constexpr const TriStateBoolOption PAUSED_OPTION = {"add-paused", true};
|
||||||
constexpr const BoolOption SKIP_HASH_CHECK_OPTION = {"skip-hash-check"};
|
constexpr const BoolOption SKIP_HASH_CHECK_OPTION = {"skip-hash-check"};
|
||||||
constexpr const StringOption CATEGORY_OPTION = {"category"};
|
constexpr const StringOption CATEGORY_OPTION = {"category"};
|
||||||
constexpr const BoolOption SEQUENTIAL_OPTION = {"sequential"};
|
constexpr const BoolOption SEQUENTIAL_OPTION = {"sequential"};
|
||||||
constexpr const BoolOption FIRST_AND_LAST_OPTION = {"first-and-last"};
|
constexpr const BoolOption FIRST_AND_LAST_OPTION = {"first-and-last"};
|
||||||
constexpr const TriStateBoolOption SKIP_DIALOG_OPTION = {"skip-dialog"};
|
constexpr const TriStateBoolOption SKIP_DIALOG_OPTION = {"skip-dialog", true};
|
||||||
}
|
}
|
||||||
|
|
||||||
QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env)
|
QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue