From 531ae501ad40f2f6f4dfbf33a1ddb5e93961f9cd Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Sat, 2 Jan 2021 16:55:17 +0300 Subject: [PATCH] Use std::optional instead of custom TriStateBool --- src/app/application.cpp | 10 ++-- src/app/cmdoptions.cpp | 40 +++++--------- src/app/cmdoptions.h | 7 ++- src/base/CMakeLists.txt | 2 - src/base/base.pri | 2 - src/base/bittorrent/addtorrentparams.h | 7 ++- src/base/bittorrent/session.cpp | 11 ++-- src/base/rss/rss_autodownloader.cpp | 3 +- src/base/rss/rss_autodownloadrule.cpp | 68 +++++++++++------------- src/base/rss/rss_autodownloadrule.h | 6 +-- src/base/scanfoldersmodel.cpp | 4 +- src/base/tristatebool.cpp | 44 ---------------- src/base/tristatebool.h | 73 -------------------------- src/gui/addnewtorrentdialog.cpp | 13 ++--- src/gui/rss/automatedrssdownloader.cpp | 12 ++--- src/gui/torrentcreatordialog.cpp | 2 +- src/webui/api/torrentscontroller.cpp | 6 +-- 17 files changed, 75 insertions(+), 235 deletions(-) delete mode 100644 src/base/tristatebool.cpp delete mode 100644 src/base/tristatebool.h diff --git a/src/app/application.cpp b/src/app/application.cpp index 9453f8ba3..29207e84e 100644 --- a/src/app/application.cpp +++ b/src/app/application.cpp @@ -505,7 +505,7 @@ void Application::processParams(const QStringList ¶ms) } #endif BitTorrent::AddTorrentParams torrentParams; - TriStateBool skipTorrentDialog; + std::optional 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 diff --git a/src/app/cmdoptions.cpp b/src/app/cmdoptions.cpp index 8fe86fbf4..6535e1702 100644 --- a/src/app/cmdoptions.cpp +++ b/src/app/cmdoptions.cpp @@ -254,13 +254,13 @@ namespace return padUsageText(fullParameter() + QLatin1String("=")); } - TriStateBool value(const QString &arg) const + std::optional 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(""))); } - TriStateBool value(const QProcessEnvironment &env) const + std::optional 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; diff --git a/src/app/cmdoptions.h b/src/app/cmdoptions.h index 25d718031..2f167b99d 100644 --- a/src/app/cmdoptions.h +++ b/src/app/cmdoptions.h @@ -30,13 +30,12 @@ #pragma once +#include #include #include #include -#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 addPaused; + std::optional skipDialog; QStringList torrents; QString profileDir; QString configurationName; diff --git a/src/base/CMakeLists.txt b/src/base/CMakeLists.txt index 84144d82f..28776810a 100644 --- a/src/base/CMakeLists.txt +++ b/src/base/CMakeLists.txt @@ -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 diff --git a/src/base/base.pri b/src/base/base.pri index 7b30ce1ad..1d709e6dd 100644 --- a/src/base/base.pri +++ b/src/base/base.pri @@ -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 \ diff --git a/src/base/bittorrent/addtorrentparams.h b/src/base/bittorrent/addtorrentparams.h index a420b6a5a..df1663260 100644 --- a/src/base/bittorrent/addtorrentparams.h +++ b/src/base/bittorrent/addtorrentparams.h @@ -34,7 +34,6 @@ #include #include -#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 addPaused; QVector filePriorities; // used if TorrentInfo is set bool skipChecking = false; std::optional contentLayout; - TriStateBool useAutoTMM; + std::optional useAutoTMM; int uploadLimit = -1; int downloadLimit = -1; int seedingTimeLimit = TorrentHandle::USE_GLOBAL_SEEDING_TIME; diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 7c78c947c..9445ccecf 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -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()) diff --git a/src/base/rss/rss_autodownloader.cpp b/src/base/rss/rss_autodownloader.cpp index cdd857024..2d8c9b07d 100644 --- a/src/base/rss/rss_autodownloader.cpp +++ b/src/base/rss/rss_autodownloader.cpp @@ -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 &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); diff --git a/src/base/rss/rss_autodownloadrule.cpp b/src/base/rss/rss_autodownloadrule.cpp index 89d712664..ac47fbb53 100644 --- a/src/base/rss/rss_autodownloadrule.cpp +++ b/src/base/rss/rss_autodownloadrule.cpp @@ -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 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 boolValue) { - switch (static_cast(triStateBool)) - { - case 0: return false; - case 1: return true; - default: return {}; - } + return boolValue.has_value() ? *boolValue : QJsonValue {}; } - TriStateBool addPausedLegacyToTriStateBool(const int val) + std::optional 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 boolValue) { - switch (static_cast(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 jsonValueToContentLayout(const QJsonValue &jsonVal) @@ -142,7 +134,7 @@ namespace RSS QString savePath; QString category; - TriStateBool addPaused = TriStateBool::Undefined; + std::optional addPaused; std::optional 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 createSubfolder = toOptionalBool(jsonObj.value(Str_CreateSubfolder)); std::optional 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 AutoDownloadRule::addPaused() const { return m_dataPtr->addPaused; } -void AutoDownloadRule::setAddPaused(const TriStateBool addPaused) +void AutoDownloadRule::setAddPaused(const std::optional addPaused) { m_dataPtr->addPaused = addPaused; } diff --git a/src/base/rss/rss_autodownloadrule.h b/src/base/rss/rss_autodownloadrule.h index 48c26c7ef..2af6af810 100644 --- a/src/base/rss/rss_autodownloadrule.h +++ b/src/base/rss/rss_autodownloadrule.h @@ -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 addPaused() const; + void setAddPaused(std::optional addPaused); std::optional torrentContentLayout() const; void setTorrentContentLayout(std::optional contentLayout); QString assignedCategory() const; diff --git a/src/base/scanfoldersmodel.cpp b/src/base/scanfoldersmodel.cpp index 97a718a01..f48f4cd10 100644 --- a/src/base/scanfoldersmodel.cpp +++ b/src/base/scanfoldersmodel.cpp @@ -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)) diff --git a/src/base/tristatebool.cpp b/src/base/tristatebool.cpp deleted file mode 100644 index 6c39fc1ff..000000000 --- a/src/base/tristatebool.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2015 Vladimir Golovnev - * - * 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 - -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; -} diff --git a/src/base/tristatebool.h b/src/base/tristatebool.h deleted file mode 100644 index 67009ba6b..000000000 --- a/src/base/tristatebool.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2015 Vladimir Golovnev - * - * 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); -} diff --git a/src/gui/addnewtorrentdialog.cpp b/src/gui/addnewtorrentdialog.cpp index 559f1836e..f05cd94c5 100644 --- a/src/gui/addnewtorrentdialog.cpp +++ b/src/gui/addnewtorrentdialog.cpp @@ -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(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()); diff --git a/src/gui/rss/automatedrssdownloader.cpp b/src/gui/rss/automatedrssdownloader.cpp index 0956b6ad6..df3545c36 100644 --- a/src/gui/rss/automatedrssdownloader.cpp +++ b/src/gui/rss/automatedrssdownloader.cpp @@ -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 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 contentLayout; diff --git a/src/gui/torrentcreatordialog.cpp b/src/gui/torrentcreatordialog.cpp index 1dc2a9fda..372966236 100644 --- a/src/gui/torrentcreatordialog.cpp +++ b/src/gui/torrentcreatordialog.cpp @@ -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); } diff --git a/src/webui/api/torrentscontroller.cpp b/src/webui/api/torrentscontroller.cpp index fc2af2bcb..35f244659 100644 --- a/src/webui/api/torrentscontroller.cpp +++ b/src/webui/api/torrentscontroller.cpp @@ -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 addPaused = parseBool(params()["paused"]); const QString savepath = params()["savepath"].trimmed(); const QString category = params()["category"]; const QSet 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 autoTMM = parseBool(params()["autoTMM"]); const QString contentLayoutParam = params()["contentLayout"]; const std::optional contentLayout = (!contentLayoutParam.isEmpty()