mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-01-09 04:08:16 +08:00
Use std::optional<bool> instead of custom TriStateBool
This commit is contained in:
parent
d0cac421bb
commit
531ae501ad
@ -505,7 +505,7 @@ void Application::processParams(const QStringList ¶ms)
|
||||
}
|
||||
#endif
|
||||
BitTorrent::AddTorrentParams torrentParams;
|
||||
TriStateBool skipTorrentDialog;
|
||||
std::optional<bool> skipTorrentDialog;
|
||||
|
||||
for (QString param : params)
|
||||
{
|
||||
@ -521,7 +521,7 @@ void Application::processParams(const QStringList ¶ms)
|
||||
|
||||
if (param.startsWith(QLatin1String("@addPaused=")))
|
||||
{
|
||||
torrentParams.addPaused = param.midRef(11).toInt() ? TriStateBool::True : TriStateBool::False;
|
||||
torrentParams.addPaused = (param.midRef(11).toInt() != 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -551,7 +551,7 @@ void Application::processParams(const QStringList ¶ms)
|
||||
|
||||
if (param.startsWith(QLatin1String("@skipDialog=")))
|
||||
{
|
||||
skipTorrentDialog = param.midRef(12).toInt() ? TriStateBool::True : TriStateBool::False;
|
||||
skipTorrentDialog = (param.midRef(12).toInt() != 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -561,9 +561,7 @@ void Application::processParams(const QStringList ¶ms)
|
||||
// be shown and skipTorrentDialog is undefined. The other is when
|
||||
// skipTorrentDialog is false, meaning that the application setting
|
||||
// should be overridden.
|
||||
const bool showDialogForThisTorrent =
|
||||
((AddNewTorrentDialog::isEnabled() && skipTorrentDialog == TriStateBool::Undefined)
|
||||
|| skipTorrentDialog == TriStateBool::False);
|
||||
const bool showDialogForThisTorrent = !skipTorrentDialog.value_or(!AddNewTorrentDialog::isEnabled());
|
||||
if (showDialogForThisTorrent)
|
||||
AddNewTorrentDialog::show(param, torrentParams, m_window);
|
||||
else
|
||||
|
@ -254,13 +254,13 @@ namespace
|
||||
return padUsageText(fullParameter() + QLatin1String("=<true|false>"));
|
||||
}
|
||||
|
||||
TriStateBool value(const QString &arg) const
|
||||
std::optional<bool> value(const QString &arg) const
|
||||
{
|
||||
QStringList parts = arg.split(QLatin1Char('='));
|
||||
|
||||
if (parts.size() == 1)
|
||||
{
|
||||
return TriStateBool(m_defaultValue);
|
||||
return m_defaultValue;
|
||||
}
|
||||
if (parts.size() == 2)
|
||||
{
|
||||
@ -268,11 +268,11 @@ namespace
|
||||
|
||||
if ((val.toUpper() == QLatin1String("TRUE")) || (val == QLatin1String("1")))
|
||||
{
|
||||
return TriStateBool::True;
|
||||
return true;
|
||||
}
|
||||
if ((val.toUpper() == QLatin1String("FALSE")) || (val == QLatin1String("0")))
|
||||
{
|
||||
return TriStateBool::False;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -282,30 +282,30 @@ namespace
|
||||
.arg(fullParameter(), QLatin1String("<true|false>")));
|
||||
}
|
||||
|
||||
TriStateBool value(const QProcessEnvironment &env) const
|
||||
std::optional<bool> value(const QProcessEnvironment &env) const
|
||||
{
|
||||
const QString val = env.value(envVarName(), "-1");
|
||||
|
||||
if (val.isEmpty())
|
||||
{
|
||||
return TriStateBool(m_defaultValue);
|
||||
return m_defaultValue;
|
||||
}
|
||||
if (val == QLatin1String("-1"))
|
||||
{
|
||||
return TriStateBool::Undefined;
|
||||
return std::nullopt;
|
||||
}
|
||||
if ((val.toUpper() == QLatin1String("TRUE")) || (val == QLatin1String("1")))
|
||||
{
|
||||
return TriStateBool::True;
|
||||
return true;
|
||||
}
|
||||
if ((val.toUpper() == QLatin1String("FALSE")) || (val == QLatin1String("0")))
|
||||
{
|
||||
return TriStateBool::False;
|
||||
return false;
|
||||
}
|
||||
|
||||
qDebug() << QObject::tr("Expected %1 in environment variable '%2', but got '%3'")
|
||||
.arg(QLatin1String("true|false"), envVarName(), val);
|
||||
return TriStateBool::Undefined;
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
bool m_defaultValue;
|
||||
@ -374,14 +374,8 @@ QStringList QBtCommandLineParameters::paramList() const
|
||||
if (!savePath.isEmpty())
|
||||
result.append(QLatin1String("@savePath=") + savePath);
|
||||
|
||||
if (addPaused == TriStateBool::True)
|
||||
{
|
||||
result.append(QLatin1String("@addPaused=1"));
|
||||
}
|
||||
else if (addPaused == TriStateBool::False)
|
||||
{
|
||||
result.append(QLatin1String("@addPaused=0"));
|
||||
}
|
||||
if (addPaused.has_value())
|
||||
result.append(*addPaused ? QLatin1String {"@addPaused=1"} : QLatin1String {"@addPaused=0"});
|
||||
|
||||
if (skipChecking)
|
||||
result.append(QLatin1String("@skipChecking"));
|
||||
@ -395,14 +389,8 @@ QStringList QBtCommandLineParameters::paramList() const
|
||||
if (firstLastPiecePriority)
|
||||
result.append(QLatin1String("@firstLastPiecePriority"));
|
||||
|
||||
if (skipDialog == TriStateBool::True)
|
||||
{
|
||||
result.append(QLatin1String("@skipDialog=1"));
|
||||
}
|
||||
else if (skipDialog == TriStateBool::False)
|
||||
{
|
||||
result.append(QLatin1String("@skipDialog=0"));
|
||||
}
|
||||
if (skipDialog.has_value())
|
||||
result.append(*skipDialog ? QLatin1String {"@skipDialog=1"} : QLatin1String {"@skipDialog=0"});
|
||||
|
||||
result += torrents;
|
||||
return result;
|
||||
|
@ -30,13 +30,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
#include "base/tristatebool.h"
|
||||
|
||||
class QProcessEnvironment;
|
||||
|
||||
struct QBtCommandLineParameters
|
||||
@ -55,8 +54,8 @@ struct QBtCommandLineParameters
|
||||
bool shouldDaemonize;
|
||||
#endif
|
||||
int webUiPort;
|
||||
TriStateBool addPaused;
|
||||
TriStateBool skipDialog;
|
||||
std::optional<bool> addPaused;
|
||||
std::optional<bool> skipDialog;
|
||||
QStringList torrents;
|
||||
QString profileDir;
|
||||
QString configurationName;
|
||||
|
@ -73,7 +73,6 @@ add_library(qbt_base STATIC
|
||||
settingsstorage.h
|
||||
torrentfileguard.h
|
||||
torrentfilter.h
|
||||
tristatebool.h
|
||||
types.h
|
||||
unicodestrings.h
|
||||
utils/bytearray.h
|
||||
@ -150,7 +149,6 @@ add_library(qbt_base STATIC
|
||||
settingsstorage.cpp
|
||||
torrentfileguard.cpp
|
||||
torrentfilter.cpp
|
||||
tristatebool.cpp
|
||||
utils/bytearray.cpp
|
||||
utils/foreignapps.cpp
|
||||
utils/fs.cpp
|
||||
|
@ -73,7 +73,6 @@ HEADERS += \
|
||||
$$PWD/settingvalue.h \
|
||||
$$PWD/torrentfileguard.h \
|
||||
$$PWD/torrentfilter.h \
|
||||
$$PWD/tristatebool.h \
|
||||
$$PWD/types.h \
|
||||
$$PWD/unicodestrings.h \
|
||||
$$PWD/utils/bytearray.h \
|
||||
@ -150,7 +149,6 @@ SOURCES += \
|
||||
$$PWD/settingsstorage.cpp \
|
||||
$$PWD/torrentfileguard.cpp \
|
||||
$$PWD/torrentfilter.cpp \
|
||||
$$PWD/tristatebool.cpp \
|
||||
$$PWD/utils/bytearray.cpp \
|
||||
$$PWD/utils/foreignapps.cpp \
|
||||
$$PWD/utils/fs.cpp \
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
|
||||
#include "base/tristatebool.h"
|
||||
#include "torrenthandle.h"
|
||||
#include "torrentcontentlayout.h"
|
||||
|
||||
@ -51,12 +50,12 @@ namespace BitTorrent
|
||||
bool disableTempPath = false; // e.g. for imported torrents
|
||||
bool sequential = false;
|
||||
bool firstLastPiecePriority = false;
|
||||
TriStateBool addForced;
|
||||
TriStateBool addPaused;
|
||||
bool addForced = false;
|
||||
std::optional<bool> addPaused;
|
||||
QVector<DownloadPriority> filePriorities; // used if TorrentInfo is set
|
||||
bool skipChecking = false;
|
||||
std::optional<BitTorrent::TorrentContentLayout> contentLayout;
|
||||
TriStateBool useAutoTMM;
|
||||
std::optional<bool> useAutoTMM;
|
||||
int uploadLimit = -1;
|
||||
int downloadLimit = -1;
|
||||
int seedingTimeLimit = TorrentHandle::USE_GLOBAL_SEEDING_TIME;
|
||||
|
@ -78,7 +78,6 @@
|
||||
#include "base/profile.h"
|
||||
#include "base/torrentfileguard.h"
|
||||
#include "base/torrentfilter.h"
|
||||
#include "base/tristatebool.h"
|
||||
#include "base/unicodestrings.h"
|
||||
#include "base/utils/bytearray.h"
|
||||
#include "base/utils/fs.h"
|
||||
@ -2058,16 +2057,12 @@ LoadTorrentParams Session::initLoadTorrentParams(const AddTorrentParams &addTorr
|
||||
loadTorrentParams.firstLastPiecePriority = addTorrentParams.firstLastPiecePriority;
|
||||
loadTorrentParams.hasSeedStatus = addTorrentParams.skipChecking; // do not react on 'torrent_finished_alert' when skipping
|
||||
loadTorrentParams.contentLayout = addTorrentParams.contentLayout.value_or(torrentContentLayout());
|
||||
loadTorrentParams.forced = (addTorrentParams.addForced == TriStateBool::True);
|
||||
loadTorrentParams.paused = ((addTorrentParams.addPaused == TriStateBool::Undefined)
|
||||
? isAddTorrentPaused()
|
||||
: (addTorrentParams.addPaused == TriStateBool::True));
|
||||
loadTorrentParams.forced = addTorrentParams.addForced;
|
||||
loadTorrentParams.paused = addTorrentParams.addPaused.value_or(isAddTorrentPaused());
|
||||
loadTorrentParams.ratioLimit = addTorrentParams.ratioLimit;
|
||||
loadTorrentParams.seedingTimeLimit = addTorrentParams.seedingTimeLimit;
|
||||
|
||||
const bool useAutoTMM = ((addTorrentParams.useAutoTMM == TriStateBool::Undefined)
|
||||
? !isAutoTMMDisabledByDefault()
|
||||
: (addTorrentParams.useAutoTMM == TriStateBool::True));
|
||||
const bool useAutoTMM = addTorrentParams.useAutoTMM.value_or(!isAutoTMMDisabledByDefault());
|
||||
if (useAutoTMM)
|
||||
loadTorrentParams.savePath = "";
|
||||
else if (addTorrentParams.savePath.trimmed().isEmpty())
|
||||
|
@ -47,7 +47,6 @@
|
||||
#include "../logger.h"
|
||||
#include "../profile.h"
|
||||
#include "../settingsstorage.h"
|
||||
#include "../tristatebool.h"
|
||||
#include "../utils/fs.h"
|
||||
#include "rss_article.h"
|
||||
#include "rss_autodownloadrule.h"
|
||||
@ -398,7 +397,7 @@ void AutoDownloader::processJob(const QSharedPointer<ProcessingJob> &job)
|
||||
params.addPaused = rule.addPaused();
|
||||
params.contentLayout = rule.torrentContentLayout();
|
||||
if (!rule.savePath().isEmpty())
|
||||
params.useAutoTMM = TriStateBool::False;
|
||||
params.useAutoTMM = false;
|
||||
const auto torrentURL = job->articleData.value(Article::KeyTorrentURL).toString();
|
||||
BitTorrent::Session::instance()->addTorrent(torrentURL, params);
|
||||
|
||||
|
@ -42,7 +42,6 @@
|
||||
|
||||
#include "base/global.h"
|
||||
#include "base/preferences.h"
|
||||
#include "base/tristatebool.h"
|
||||
#include "base/utils/fs.h"
|
||||
#include "base/utils/string.h"
|
||||
#include "rss_article.h"
|
||||
@ -51,45 +50,38 @@
|
||||
|
||||
namespace
|
||||
{
|
||||
TriStateBool jsonValueToTriStateBool(const QJsonValue &jsonVal)
|
||||
std::optional<bool> toOptionalBool(const QJsonValue &jsonVal)
|
||||
{
|
||||
if (jsonVal.isBool())
|
||||
return TriStateBool(jsonVal.toBool());
|
||||
return jsonVal.toBool();
|
||||
|
||||
if (!jsonVal.isNull())
|
||||
qDebug() << Q_FUNC_INFO << "Incorrect value" << jsonVal.toVariant();
|
||||
|
||||
return TriStateBool::Undefined;
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
QJsonValue triStateBoolToJsonValue(const TriStateBool triStateBool)
|
||||
QJsonValue toJsonValue(const std::optional<bool> boolValue)
|
||||
{
|
||||
switch (static_cast<signed char>(triStateBool))
|
||||
{
|
||||
case 0: return false;
|
||||
case 1: return true;
|
||||
default: return {};
|
||||
}
|
||||
return boolValue.has_value() ? *boolValue : QJsonValue {};
|
||||
}
|
||||
|
||||
TriStateBool addPausedLegacyToTriStateBool(const int val)
|
||||
std::optional<bool> addPausedLegacyToOptionalBool(const int val)
|
||||
{
|
||||
switch (val)
|
||||
{
|
||||
case 1: return TriStateBool::True; // always
|
||||
case 2: return TriStateBool::False; // never
|
||||
default: return TriStateBool::Undefined; // default
|
||||
case 1:
|
||||
return true; // always
|
||||
case 2:
|
||||
return false; // never
|
||||
default:
|
||||
return std::nullopt; // default
|
||||
}
|
||||
}
|
||||
|
||||
int triStateBoolToAddPausedLegacy(const TriStateBool triStateBool)
|
||||
int toAddPausedLegacy(const std::optional<bool> boolValue)
|
||||
{
|
||||
switch (static_cast<signed char>(triStateBool))
|
||||
{
|
||||
case 0: return 2; // never
|
||||
case 1: return 1; // always
|
||||
default: return 0; // default
|
||||
}
|
||||
if (!boolValue.has_value())
|
||||
return 0; // default
|
||||
|
||||
return (*boolValue ? 1 /* always */ : 2 /* never */);
|
||||
}
|
||||
|
||||
std::optional<BitTorrent::TorrentContentLayout> jsonValueToContentLayout(const QJsonValue &jsonVal)
|
||||
@ -142,7 +134,7 @@ namespace RSS
|
||||
|
||||
QString savePath;
|
||||
QString category;
|
||||
TriStateBool addPaused = TriStateBool::Undefined;
|
||||
std::optional<bool> addPaused;
|
||||
std::optional<BitTorrent::TorrentContentLayout> contentLayout;
|
||||
|
||||
bool smartFilter = false;
|
||||
@ -477,7 +469,7 @@ QJsonObject AutoDownloadRule::toJsonObject() const
|
||||
, {Str_AssignedCategory, assignedCategory()}
|
||||
, {Str_LastMatch, lastMatch().toString(Qt::RFC2822Date)}
|
||||
, {Str_IgnoreDays, ignoreDays()}
|
||||
, {Str_AddPaused, triStateBoolToJsonValue(addPaused())}
|
||||
, {Str_AddPaused, toJsonValue(addPaused())}
|
||||
, {Str_ContentLayout, contentLayoutToJsonValue(torrentContentLayout())}
|
||||
, {Str_SmartFilter, useSmartFilter()}
|
||||
, {Str_PreviouslyMatched, QJsonArray::fromStringList(previouslyMatchedEpisodes())}};
|
||||
@ -494,7 +486,7 @@ AutoDownloadRule AutoDownloadRule::fromJsonObject(const QJsonObject &jsonObj, co
|
||||
rule.setEnabled(jsonObj.value(Str_Enabled).toBool(true));
|
||||
rule.setSavePath(jsonObj.value(Str_SavePath).toString());
|
||||
rule.setCategory(jsonObj.value(Str_AssignedCategory).toString());
|
||||
rule.setAddPaused(jsonValueToTriStateBool(jsonObj.value(Str_AddPaused)));
|
||||
rule.setAddPaused(toOptionalBool(jsonObj.value(Str_AddPaused)));
|
||||
|
||||
// TODO: The following code is deprecated. Replace with the commented one after several releases in 4.4.x.
|
||||
// === BEGIN DEPRECATED CODE === //
|
||||
@ -504,12 +496,14 @@ AutoDownloadRule AutoDownloadRule::fromJsonObject(const QJsonObject &jsonObj, co
|
||||
}
|
||||
else
|
||||
{
|
||||
const TriStateBool createSubfolder = jsonValueToTriStateBool(jsonObj.value(Str_CreateSubfolder));
|
||||
const std::optional<bool> createSubfolder = toOptionalBool(jsonObj.value(Str_CreateSubfolder));
|
||||
std::optional<BitTorrent::TorrentContentLayout> contentLayout;
|
||||
if (createSubfolder == TriStateBool::True)
|
||||
contentLayout = BitTorrent::TorrentContentLayout::Original;
|
||||
else if (createSubfolder == TriStateBool::False)
|
||||
contentLayout = BitTorrent::TorrentContentLayout::NoSubfolder;
|
||||
if (createSubfolder.has_value())
|
||||
{
|
||||
contentLayout = (*createSubfolder
|
||||
? BitTorrent::TorrentContentLayout::Original
|
||||
: BitTorrent::TorrentContentLayout::NoSubfolder);
|
||||
}
|
||||
|
||||
rule.setTorrentContentLayout(contentLayout);
|
||||
}
|
||||
@ -556,7 +550,7 @@ QVariantHash AutoDownloadRule::toLegacyDict() const
|
||||
{"enabled", isEnabled()},
|
||||
{"category_assigned", assignedCategory()},
|
||||
{"use_regex", useRegex()},
|
||||
{"add_paused", triStateBoolToAddPausedLegacy(addPaused())},
|
||||
{"add_paused", toAddPausedLegacy(addPaused())},
|
||||
{"episode_filter", episodeFilter()},
|
||||
{"last_match", lastMatch()},
|
||||
{"ignore_days", ignoreDays()}};
|
||||
@ -574,7 +568,7 @@ AutoDownloadRule AutoDownloadRule::fromLegacyDict(const QVariantHash &dict)
|
||||
rule.setEnabled(dict.value("enabled", false).toBool());
|
||||
rule.setSavePath(dict.value("save_path").toString());
|
||||
rule.setCategory(dict.value("category_assigned").toString());
|
||||
rule.setAddPaused(addPausedLegacyToTriStateBool(dict.value("add_paused").toInt()));
|
||||
rule.setAddPaused(addPausedLegacyToOptionalBool(dict.value("add_paused").toInt()));
|
||||
rule.setLastMatch(dict.value("last_match").toDateTime());
|
||||
rule.setIgnoreDays(dict.value("ignore_days").toInt());
|
||||
|
||||
@ -639,12 +633,12 @@ void AutoDownloadRule::setSavePath(const QString &savePath)
|
||||
m_dataPtr->savePath = Utils::Fs::toUniformPath(savePath);
|
||||
}
|
||||
|
||||
TriStateBool AutoDownloadRule::addPaused() const
|
||||
std::optional<bool> AutoDownloadRule::addPaused() const
|
||||
{
|
||||
return m_dataPtr->addPaused;
|
||||
}
|
||||
|
||||
void AutoDownloadRule::setAddPaused(const TriStateBool addPaused)
|
||||
void AutoDownloadRule::setAddPaused(const std::optional<bool> addPaused)
|
||||
{
|
||||
m_dataPtr->addPaused = addPaused;
|
||||
}
|
||||
|
@ -40,8 +40,6 @@ class QDateTime;
|
||||
class QJsonObject;
|
||||
class QRegularExpression;
|
||||
|
||||
class TriStateBool;
|
||||
|
||||
namespace RSS
|
||||
{
|
||||
struct AutoDownloadRuleData;
|
||||
@ -81,8 +79,8 @@ namespace RSS
|
||||
|
||||
QString savePath() const;
|
||||
void setSavePath(const QString &savePath);
|
||||
TriStateBool addPaused() const;
|
||||
void setAddPaused(TriStateBool addPaused);
|
||||
std::optional<bool> addPaused() const;
|
||||
void setAddPaused(std::optional<bool> addPaused);
|
||||
std::optional<BitTorrent::TorrentContentLayout> torrentContentLayout() const;
|
||||
void setTorrentContentLayout(std::optional<BitTorrent::TorrentContentLayout> contentLayout);
|
||||
QString assignedCategory() const;
|
||||
|
@ -366,12 +366,12 @@ void ScanFoldersModel::addTorrentsToSession(const QStringList &pathList)
|
||||
if (downloadInWatchFolder(file))
|
||||
{
|
||||
params.savePath = QFileInfo(file).dir().path();
|
||||
params.useAutoTMM = TriStateBool::False;
|
||||
params.useAutoTMM = false;
|
||||
}
|
||||
else if (!downloadInDefaultFolder(file))
|
||||
{
|
||||
params.savePath = downloadPathTorrentFolder(file);
|
||||
params.useAutoTMM = TriStateBool::False;
|
||||
params.useAutoTMM = false;
|
||||
}
|
||||
|
||||
if (file.endsWith(".magnet", Qt::CaseInsensitive))
|
||||
|
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2015 Vladimir Golovnev <glassez@yandex.ru>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give permission to
|
||||
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||
* and distribute the linked executables. You must obey the GNU General Public
|
||||
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||
* modify file(s), you may extend this exception to your version of the file(s),
|
||||
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||
* exception statement from your version.
|
||||
*/
|
||||
|
||||
#include "tristatebool.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
const TriStateBool TriStateBool::Undefined(-1);
|
||||
const TriStateBool TriStateBool::False(0);
|
||||
const TriStateBool TriStateBool::True(1);
|
||||
|
||||
TriStateBool TriStateBool::fromString(const QString &string)
|
||||
{
|
||||
if (string.compare("true", Qt::CaseInsensitive) == 0)
|
||||
return True;
|
||||
if (string.compare("false", Qt::CaseInsensitive) == 0)
|
||||
return False;
|
||||
return Undefined;
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2015 Vladimir Golovnev <glassez@yandex.ru>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give permission to
|
||||
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||
* and distribute the linked executables. You must obey the GNU General Public
|
||||
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||
* modify file(s), you may extend this exception to your version of the file(s),
|
||||
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||
* exception statement from your version.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
class QString;
|
||||
|
||||
class TriStateBool
|
||||
{
|
||||
public:
|
||||
static const TriStateBool Undefined;
|
||||
static const TriStateBool False;
|
||||
static const TriStateBool True;
|
||||
|
||||
constexpr TriStateBool() = default;
|
||||
constexpr TriStateBool(const TriStateBool &other) = default;
|
||||
explicit constexpr TriStateBool(const bool boolean)
|
||||
{
|
||||
*this = boolean ? True : False;
|
||||
}
|
||||
|
||||
constexpr TriStateBool &operator=(const TriStateBool &other) = default;
|
||||
|
||||
explicit constexpr operator signed char() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
|
||||
constexpr friend bool operator==(const TriStateBool &left, const TriStateBool &right)
|
||||
{
|
||||
return (left.m_value == right.m_value);
|
||||
}
|
||||
|
||||
static TriStateBool fromString(const QString &string);
|
||||
|
||||
private:
|
||||
explicit constexpr TriStateBool(const int value)
|
||||
: m_value((value < 0) ? -1 : ((value > 0) ? 1 : 0))
|
||||
{
|
||||
}
|
||||
|
||||
signed char m_value = -1; // Undefined by default
|
||||
};
|
||||
|
||||
constexpr bool operator!=(const TriStateBool &left, const TriStateBool &right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
@ -107,12 +107,7 @@ AddNewTorrentDialog::AddNewTorrentDialog(const BitTorrent::AddTorrentParams &inP
|
||||
|
||||
const auto *session = BitTorrent::Session::instance();
|
||||
|
||||
if (m_torrentParams.addPaused == TriStateBool::True)
|
||||
m_ui->startTorrentCheckBox->setChecked(false);
|
||||
else if (m_torrentParams.addPaused == TriStateBool::False)
|
||||
m_ui->startTorrentCheckBox->setChecked(true);
|
||||
else
|
||||
m_ui->startTorrentCheckBox->setChecked(!session->isAddTorrentPaused());
|
||||
m_ui->startTorrentCheckBox->setChecked(!m_torrentParams.addPaused.value_or(session->isAddTorrentPaused()));
|
||||
|
||||
m_ui->comboTTM->blockSignals(true); // the TreeView size isn't correct if the slot does it job at this point
|
||||
m_ui->comboTTM->setCurrentIndex(!session->isAutoTMMDisabledByDefault());
|
||||
@ -573,7 +568,7 @@ void AddNewTorrentDialog::accept()
|
||||
if (m_contentModel)
|
||||
m_torrentParams.filePriorities = m_contentModel->model()->getFilePriorities();
|
||||
|
||||
m_torrentParams.addPaused = TriStateBool(!m_ui->startTorrentCheckBox->isChecked());
|
||||
m_torrentParams.addPaused = !m_ui->startTorrentCheckBox->isChecked();
|
||||
m_torrentParams.contentLayout = static_cast<BitTorrent::TorrentContentLayout>(m_ui->contentLayoutComboBox->currentIndex());
|
||||
|
||||
m_torrentParams.sequential = m_ui->sequentialCheckBox->isChecked();
|
||||
@ -582,13 +577,13 @@ void AddNewTorrentDialog::accept()
|
||||
QString savePath = m_ui->savePath->selectedPath();
|
||||
if (m_ui->comboTTM->currentIndex() != 1)
|
||||
{ // 0 is Manual mode and 1 is Automatic mode. Handle all non 1 values as manual mode.
|
||||
m_torrentParams.useAutoTMM = TriStateBool::False;
|
||||
m_torrentParams.useAutoTMM = false;
|
||||
m_torrentParams.savePath = savePath;
|
||||
saveSavePathHistory();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_torrentParams.useAutoTMM = TriStateBool::True;
|
||||
m_torrentParams.useAutoTMM = true;
|
||||
}
|
||||
|
||||
setEnabled(!m_ui->checkBoxNeverShow->isChecked());
|
||||
|
@ -269,10 +269,8 @@ void AutomatedRssDownloader::updateRuleDefinitionBox()
|
||||
if (m_currentRule.assignedCategory().isEmpty())
|
||||
m_ui->comboCategory->clearEditText();
|
||||
int index = 0;
|
||||
if (m_currentRule.addPaused() == TriStateBool::True)
|
||||
index = 1;
|
||||
else if (m_currentRule.addPaused() == TriStateBool::False)
|
||||
index = 2;
|
||||
if (m_currentRule.addPaused().has_value())
|
||||
index = (*m_currentRule.addPaused() ? 1 : 2);
|
||||
m_ui->comboAddPaused->setCurrentIndex(index);
|
||||
index = 0;
|
||||
if (m_currentRule.torrentContentLayout())
|
||||
@ -347,11 +345,11 @@ void AutomatedRssDownloader::updateEditedRule()
|
||||
m_currentRule.setEpisodeFilter(m_ui->lineEFilter->text());
|
||||
m_currentRule.setSavePath(m_ui->checkBoxSaveDiffDir->isChecked() ? m_ui->lineSavePath->selectedPath() : "");
|
||||
m_currentRule.setCategory(m_ui->comboCategory->currentText());
|
||||
TriStateBool addPaused; // Undefined by default
|
||||
std::optional<bool> addPaused;
|
||||
if (m_ui->comboAddPaused->currentIndex() == 1)
|
||||
addPaused = TriStateBool::True;
|
||||
addPaused = true;
|
||||
else if (m_ui->comboAddPaused->currentIndex() == 2)
|
||||
addPaused = TriStateBool::False;
|
||||
addPaused = false;
|
||||
m_currentRule.setAddPaused(addPaused);
|
||||
|
||||
std::optional<BitTorrent::TorrentContentLayout> contentLayout;
|
||||
|
@ -249,7 +249,7 @@ void TorrentCreatorDialog::handleCreationSuccess(const QString &path, const QStr
|
||||
params.ratioLimit = BitTorrent::TorrentHandle::NO_RATIO_LIMIT;
|
||||
params.seedingTimeLimit = BitTorrent::TorrentHandle::NO_SEEDING_TIME_LIMIT;
|
||||
}
|
||||
params.useAutoTMM = TriStateBool::False; // otherwise if it is on by default, it will overwrite `savePath` to the default save path
|
||||
params.useAutoTMM = false; // otherwise if it is on by default, it will overwrite `savePath` to the default save path
|
||||
|
||||
BitTorrent::Session::instance()->addTorrent(info, params);
|
||||
}
|
||||
|
@ -52,7 +52,6 @@
|
||||
#include "base/logger.h"
|
||||
#include "base/net/downloadmanager.h"
|
||||
#include "base/torrentfilter.h"
|
||||
#include "base/tristatebool.h"
|
||||
#include "base/utils/fs.h"
|
||||
#include "base/utils/string.h"
|
||||
#include "apierror.h"
|
||||
@ -601,11 +600,10 @@ void TorrentsController::pieceStatesAction()
|
||||
void TorrentsController::addAction()
|
||||
{
|
||||
const QString urls = params()["urls"];
|
||||
|
||||
const bool skipChecking = parseBool(params()["skip_checking"]).value_or(false);
|
||||
const bool seqDownload = parseBool(params()["sequentialDownload"]).value_or(false);
|
||||
const bool firstLastPiece = parseBool(params()["firstLastPiecePrio"]).value_or(false);
|
||||
const auto addPaused = TriStateBool::fromString(params()["paused"]);
|
||||
const std::optional<bool> addPaused = parseBool(params()["paused"]);
|
||||
const QString savepath = params()["savepath"].trimmed();
|
||||
const QString category = params()["category"];
|
||||
const QSet<QString> tags = List::toSet(params()["tags"].split(',', QString::SkipEmptyParts));
|
||||
@ -613,7 +611,7 @@ void TorrentsController::addAction()
|
||||
const QString torrentName = params()["rename"].trimmed();
|
||||
const int upLimit = params()["upLimit"].toInt();
|
||||
const int dlLimit = params()["dlLimit"].toInt();
|
||||
const auto autoTMM = TriStateBool::fromString(params()["autoTMM"]);
|
||||
const std::optional<bool> autoTMM = parseBool(params()["autoTMM"]);
|
||||
|
||||
const QString contentLayoutParam = params()["contentLayout"];
|
||||
const std::optional<BitTorrent::TorrentContentLayout> contentLayout = (!contentLayoutParam.isEmpty()
|
||||
|
Loading…
Reference in New Issue
Block a user