Browse Source

Consider explicitly specified parameters when resolving optional ones

PR #18955.
Closes #18951.
adaptive-webui-19844
Vladimir Golovnev 2 years ago committed by GitHub
parent
commit
c10f1f0ad2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 52
      src/base/bittorrent/sessionimpl.cpp
  2. 10
      src/gui/addnewtorrentdialog.cpp
  3. 22
      src/gui/addtorrentparamswidget.cpp

52
src/base/bittorrent/sessionimpl.cpp

@ -2611,50 +2611,30 @@ LoadTorrentParams SessionImpl::initLoadTorrentParams(const AddTorrentParams &add
const auto defaultSavePath = suggestedSavePath(loadTorrentParams.category, addTorrentParams.useAutoTMM); const auto defaultSavePath = suggestedSavePath(loadTorrentParams.category, addTorrentParams.useAutoTMM);
const auto defaultDownloadPath = suggestedDownloadPath(loadTorrentParams.category, addTorrentParams.useAutoTMM); const auto defaultDownloadPath = suggestedDownloadPath(loadTorrentParams.category, addTorrentParams.useAutoTMM);
loadTorrentParams.useAutoTMM = addTorrentParams.useAutoTMM.value_or(!isAutoTMMDisabledByDefault()); loadTorrentParams.useAutoTMM = addTorrentParams.useAutoTMM.value_or(
addTorrentParams.savePath.isEmpty() && addTorrentParams.downloadPath.isEmpty() && !isAutoTMMDisabledByDefault());
if (!addTorrentParams.useAutoTMM.has_value()) if (!loadTorrentParams.useAutoTMM)
{ {
// Default TMM settings if (addTorrentParams.savePath.isAbsolute())
loadTorrentParams.savePath = addTorrentParams.savePath;
if (!loadTorrentParams.useAutoTMM) else
{ loadTorrentParams.savePath = defaultSavePath / addTorrentParams.savePath;
loadTorrentParams.savePath = defaultSavePath;
if (isDownloadPathEnabled())
loadTorrentParams.downloadPath = (!defaultDownloadPath.isEmpty() ? defaultDownloadPath : downloadPath());
}
}
else
{
// Overridden TMM settings
if (!loadTorrentParams.useAutoTMM) // if useDownloadPath isn't specified but downloadPath is explicitly set we prefer to use it
const bool useDownloadPath = addTorrentParams.useDownloadPath.value_or(!addTorrentParams.downloadPath.isEmpty() || isDownloadPathEnabled());
if (useDownloadPath)
{ {
if (addTorrentParams.savePath.isAbsolute()) // Overridden "Download path" settings
loadTorrentParams.savePath = addTorrentParams.savePath;
else
loadTorrentParams.savePath = defaultSavePath / addTorrentParams.savePath;
if (!addTorrentParams.useDownloadPath.has_value()) if (addTorrentParams.downloadPath.isAbsolute())
{ {
// Default "Download path" settings loadTorrentParams.downloadPath = addTorrentParams.downloadPath;
if (isDownloadPathEnabled())
loadTorrentParams.downloadPath = (!defaultDownloadPath.isEmpty() ? defaultDownloadPath : downloadPath());
} }
else if (addTorrentParams.useDownloadPath.value()) else
{ {
// Overridden "Download path" settings const Path basePath = (!defaultDownloadPath.isEmpty() ? defaultDownloadPath : downloadPath());
loadTorrentParams.downloadPath = basePath / addTorrentParams.downloadPath;
if (addTorrentParams.downloadPath.isAbsolute())
{
loadTorrentParams.downloadPath = addTorrentParams.downloadPath;
}
else
{
const Path basePath = (!defaultDownloadPath.isEmpty() ? defaultDownloadPath : downloadPath());
loadTorrentParams.downloadPath = basePath / addTorrentParams.downloadPath;
}
} }
} }
} }

10
src/gui/addnewtorrentdialog.cpp

@ -860,6 +860,16 @@ void AddNewTorrentDialog::accept()
m_torrentParams.downloadPath = downloadPath; m_torrentParams.downloadPath = downloadPath;
updatePathHistory(KEY_DOWNLOADPATHHISTORY, downloadPath, savePathHistoryLength()); updatePathHistory(KEY_DOWNLOADPATHHISTORY, downloadPath, savePathHistoryLength());
} }
else
{
m_torrentParams.downloadPath = Path();
}
}
else
{
m_torrentParams.savePath = Path();
m_torrentParams.downloadPath = Path();
m_torrentParams.useDownloadPath = std::nullopt;
} }
setEnabled(!m_ui->checkBoxNeverShow->isChecked()); setEnabled(!m_ui->checkBoxNeverShow->isChecked());

22
src/gui/addtorrentparamswidget.cpp

@ -48,12 +48,28 @@ namespace
Q_ASSERT(data.userType() == QMetaType::Bool); Q_ASSERT(data.userType() == QMetaType::Bool);
return data.toBool(); return data.toBool();
} }
BitTorrent::AddTorrentParams cleanParams(BitTorrent::AddTorrentParams params)
{
if (!params.useAutoTMM.has_value() || params.useAutoTMM.value())
{
params.savePath = Path();
params.downloadPath = Path();
params.useDownloadPath = std::nullopt;
}
if (!params.useDownloadPath.has_value() || !params.useDownloadPath.value())
{
params.downloadPath = Path();
}
return params;
}
} }
AddTorrentParamsWidget::AddTorrentParamsWidget(BitTorrent::AddTorrentParams addTorrentParams, QWidget *parent) AddTorrentParamsWidget::AddTorrentParamsWidget(BitTorrent::AddTorrentParams addTorrentParams, QWidget *parent)
: QWidget(parent) : QWidget(parent)
, m_ui {new Ui::AddTorrentParamsWidget} , m_ui {new Ui::AddTorrentParamsWidget}
, m_addTorrentParams {std::move(addTorrentParams)}
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
@ -110,7 +126,7 @@ AddTorrentParamsWidget::AddTorrentParamsWidget(BitTorrent::AddTorrentParams addT
miscParamsLayout->addWidget(m_ui->stopConditionWidget); miscParamsLayout->addWidget(m_ui->stopConditionWidget);
miscParamsLayout->addWidget(m_ui->addToQueueTopWidget); miscParamsLayout->addWidget(m_ui->addToQueueTopWidget);
populate(); setAddTorrentParams(std::move(addTorrentParams));
} }
AddTorrentParamsWidget::~AddTorrentParamsWidget() AddTorrentParamsWidget::~AddTorrentParamsWidget()
@ -126,7 +142,7 @@ void AddTorrentParamsWidget::setAddTorrentParams(BitTorrent::AddTorrentParams ad
BitTorrent::AddTorrentParams AddTorrentParamsWidget::addTorrentParams() const BitTorrent::AddTorrentParams AddTorrentParamsWidget::addTorrentParams() const
{ {
return m_addTorrentParams; return cleanParams(m_addTorrentParams);
} }
void AddTorrentParamsWidget::populate() void AddTorrentParamsWidget::populate()

Loading…
Cancel
Save