diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index f7e327d17..8663fb4ea 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -3,14 +3,14 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(QBT_APP_HEADERS application.h +cmdoptions.h filelogger.h -options.h ) set(QBT_APP_SOURCES application.cpp +cmdoptions.cpp filelogger.cpp -options.cpp main.cpp ) diff --git a/src/app/app.pri b/src/app/app.pri index c89127e63..8c8c7d870 100644 --- a/src/app/app.pri +++ b/src/app/app.pri @@ -16,13 +16,13 @@ usesystemqtsingleapplication { HEADERS += \ $$PWD/application.h \ - $$PWD/filelogger.h \ - $$PWD/options.h + $$PWD/cmdoptions.h \ + $$PWD/filelogger.h SOURCES += \ $$PWD/application.cpp \ + $$PWD/cmdoptions.cpp \ $$PWD/filelogger.cpp \ - $$PWD/options.cpp \ $$PWD/main.cpp unix: HEADERS += $$PWD/stacktrace.h diff --git a/src/app/application.h b/src/app/application.h index 313bcfa4a..f698a5e54 100644 --- a/src/app/application.h +++ b/src/app/application.h @@ -51,7 +51,7 @@ typedef QtSingleCoreApplication BaseApplication; #endif #include "base/utils/misc.h" -#include "options.h" +#include "cmdoptions.h" #ifndef DISABLE_WEBUI class WebUI; diff --git a/src/app/options.cpp b/src/app/cmdoptions.cpp similarity index 92% rename from src/app/options.cpp rename to src/app/cmdoptions.cpp index ecf825286..c3fa354c9 100644 --- a/src/app/options.cpp +++ b/src/app/cmdoptions.cpp @@ -30,7 +30,7 @@ * Contact : chris@qbittorrent.org */ -#include "options.h" +#include "cmdoptions.h" #include @@ -242,45 +242,59 @@ namespace // Option that is explicitly set to true or false, and whose value is undefined when unspecified. // May not have a shortcut. - class TriStateBoolOption: protected StringOption + class TriStateBoolOption: protected Option { public: - constexpr TriStateBoolOption(const char *name) - : StringOption {name} + constexpr TriStateBoolOption(const char *name, bool defaultValue) + : 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 { - return StringOption::usage(QLatin1String("true|false")); + return padUsageText(fullParameter() + QLatin1String("=")); } TriStateBool value(const QString &arg) const { - QString val = StringOption::value(arg); - - if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) { - return TriStateBool::True; - } - else if (val.toUpper() == QLatin1String("FALSE") || val == QLatin1String("0")) { - return TriStateBool::False; + QStringList parts = arg.split(QLatin1Char('=')); + + if (parts.size() == 1) { + return TriStateBool(m_defaultValue); } - else { - throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'", - "e.g. Parameter '--add-paused' must follow syntax " - "'--add-paused='") - .arg(fullParameter()) - .arg(QLatin1String(""))); + else if (parts.size() == 2) { + QString val = parts[1]; + + if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) { + return TriStateBool::True; + } + else if (val.toUpper() == QLatin1String("FALSE") || val == QLatin1String("0")) { + return TriStateBool::False; + } } + + throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'", + "e.g. Parameter '--add-paused' must follow syntax " + "'--add-paused='") + .arg(fullParameter()) + .arg(QLatin1String(""))); } TriStateBool value(const QProcessEnvironment &env) const { - QString val = env.value(envVarName()); + QString val = env.value(envVarName(), "-1"); if (val.isEmpty()) { + return TriStateBool(m_defaultValue); + } + else if (val == QLatin1String("-1")) { return TriStateBool::Undefined; } else if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) { @@ -295,6 +309,8 @@ namespace return TriStateBool::Undefined; } } + + bool m_defaultValue; }; bool operator==(const QString &s, const TriStateBoolOption &o) @@ -315,12 +331,12 @@ namespace constexpr const BoolOption PORTABLE_OPTION = {"portable"}; constexpr const BoolOption RELATIVE_FASTRESUME = {"relative-fastresume"}; 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 StringOption CATEGORY_OPTION = {"category"}; constexpr const BoolOption SEQUENTIAL_OPTION = {"sequential"}; 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) diff --git a/src/app/options.h b/src/app/cmdoptions.h similarity index 100% rename from src/app/options.h rename to src/app/cmdoptions.h diff --git a/src/app/main.cpp b/src/app/main.cpp index 8143b4a0c..4e6bd186f 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -69,11 +69,12 @@ Q_IMPORT_PLUGIN(QICOPlugin) #include #include + #include "application.h" -#include "options.h" #include "base/profile.h" #include "base/utils/misc.h" #include "base/preferences.h" +#include "cmdoptions.h" #include "upgrade.h"