diff --git a/src/gui/watchedfolderoptionsdialog.cpp b/src/gui/watchedfolderoptionsdialog.cpp index 30b513c68..25610887d 100644 --- a/src/gui/watchedfolderoptionsdialog.cpp +++ b/src/gui/watchedfolderoptionsdialog.cpp @@ -1,6 +1,6 @@ /* * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2021 Vladimir Golovnev + * Copyright (C) 2021-2023 Vladimir Golovnev * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -28,14 +28,9 @@ #include "watchedfolderoptionsdialog.h" -#include -#include - -#include "base/bittorrent/session.h" #include "base/global.h" -#include "base/utils/fs.h" +#include "addtorrentparamswidget.h" #include "ui_watchedfolderoptionsdialog.h" -#include "utils.h" #define SETTINGS_KEY(name) u"WatchedFolderOptionsDialog/" name @@ -43,56 +38,13 @@ WatchedFolderOptionsDialog::WatchedFolderOptionsDialog( const TorrentFilesWatcher::WatchedFolderOptions &watchedFolderOptions, QWidget *parent) : QDialog {parent} , m_ui {new Ui::WatchedFolderOptionsDialog} - , m_savePath {watchedFolderOptions.addTorrentParams.savePath} - , m_downloadPath {watchedFolderOptions.addTorrentParams.downloadPath} + , m_addTorrentParamsWidget {new AddTorrentParamsWidget(watchedFolderOptions.addTorrentParams)} , m_storeDialogSize {SETTINGS_KEY(u"DialogSize"_qs)} { m_ui->setupUi(this); - - m_ui->savePath->setMode(FileSystemPathEdit::Mode::DirectorySave); - m_ui->savePath->setDialogCaption(tr("Choose save path")); - - m_ui->downloadPath->setMode(FileSystemPathEdit::Mode::DirectorySave); - m_ui->downloadPath->setDialogCaption(tr("Choose save path")); - - const auto *session = BitTorrent::Session::instance(); - m_useDownloadPath = watchedFolderOptions.addTorrentParams.useDownloadPath.value_or(session->isDownloadPathEnabled()); - - connect(m_ui->comboTTM, qOverload(&QComboBox::currentIndexChanged), this, &WatchedFolderOptionsDialog::onTMMChanged); - connect(m_ui->categoryComboBox, qOverload(&QComboBox::currentIndexChanged), this, &WatchedFolderOptionsDialog::onCategoryChanged); - - m_ui->checkBoxRecursive->setChecked(watchedFolderOptions.recursive); - populateSavePaths(); - - const BitTorrent::AddTorrentParams &torrentParams = watchedFolderOptions.addTorrentParams; - m_ui->addToQueueTopCheckBox->setChecked(torrentParams.addToQueueTop.value_or(session->isAddTorrentToQueueTop())); - m_ui->startTorrentCheckBox->setChecked(!torrentParams.addPaused.value_or(session->isAddTorrentPaused())); - m_ui->skipCheckingCheckBox->setChecked(torrentParams.skipChecking); - m_ui->comboTTM->setCurrentIndex(torrentParams.useAutoTMM.value_or(!session->isAutoTMMDisabledByDefault())); - m_ui->contentLayoutComboBox->setCurrentIndex( - static_cast(torrentParams.contentLayout.value_or(session->torrentContentLayout()))); - - // Load categories - QStringList categories = session->categories(); - std::sort(categories.begin(), categories.end(), Utils::Compare::NaturalLessThan()); - - if (!torrentParams.category.isEmpty()) - m_ui->categoryComboBox->addItem(torrentParams.category); - m_ui->categoryComboBox->addItem(u""_qs); - - for (const QString &category : asConst(categories)) - { - if (category != torrentParams.category) - m_ui->categoryComboBox->addItem(category); - } + m_ui->groupBoxParameters->layout()->addWidget(m_addTorrentParamsWidget); loadState(); - - // Default focus - if (m_ui->comboTTM->currentIndex() == 0) // 0 is Manual mode - m_ui->savePath->setFocus(); - else - m_ui->categoryComboBox->setFocus(); } WatchedFolderOptionsDialog::~WatchedFolderOptionsDialog() @@ -105,22 +57,7 @@ TorrentFilesWatcher::WatchedFolderOptions WatchedFolderOptionsDialog::watchedFol { TorrentFilesWatcher::WatchedFolderOptions watchedFolderOptions; watchedFolderOptions.recursive = m_ui->checkBoxRecursive->isChecked(); - - BitTorrent::AddTorrentParams ¶ms = watchedFolderOptions.addTorrentParams; - const bool useAutoTMM = (m_ui->comboTTM->currentIndex() == 1); - if (!useAutoTMM) - { - params.savePath = m_ui->savePath->selectedPath(); - params.useDownloadPath = m_ui->groupBoxDownloadPath->isChecked(); - if (params.useDownloadPath) - params.downloadPath = m_ui->downloadPath->selectedPath(); - } - params.useAutoTMM = useAutoTMM; - params.category = m_ui->categoryComboBox->currentText(); - params.addToQueueTop = m_ui->addToQueueTopCheckBox->isChecked(); - params.addPaused = !m_ui->startTorrentCheckBox->isChecked(); - params.skipChecking = m_ui->skipCheckingCheckBox->isChecked(); - params.contentLayout = static_cast(m_ui->contentLayoutComboBox->currentIndex()); + watchedFolderOptions.addTorrentParams = m_addTorrentParamsWidget->addTorrentParams(); return watchedFolderOptions; } @@ -135,65 +72,3 @@ void WatchedFolderOptionsDialog::saveState() { m_storeDialogSize = size(); } - -void WatchedFolderOptionsDialog::onCategoryChanged(const int index) -{ - Q_UNUSED(index); - - if (m_ui->comboTTM->currentIndex() == 1) - { - const auto *btSession = BitTorrent::Session::instance(); - const QString categoryName = m_ui->categoryComboBox->currentText(); - - const Path savePath = btSession->categorySavePath(categoryName); - m_ui->savePath->setSelectedPath(savePath); - - const Path downloadPath = btSession->categoryDownloadPath(categoryName); - m_ui->downloadPath->setSelectedPath(downloadPath); - - m_ui->groupBoxDownloadPath->setChecked(!downloadPath.isEmpty()); - } -} - -void WatchedFolderOptionsDialog::populateSavePaths() -{ - const auto *btSession = BitTorrent::Session::instance(); - - const Path defaultSavePath {btSession->savePath()}; - m_ui->savePath->setSelectedPath(!m_savePath.isEmpty() ? m_savePath : defaultSavePath); - - const Path defaultDownloadPath {btSession->downloadPath()}; - m_ui->downloadPath->setSelectedPath(!m_downloadPath.isEmpty() ? m_downloadPath : defaultDownloadPath); - - m_ui->groupBoxDownloadPath->setChecked(m_useDownloadPath); -} - -void WatchedFolderOptionsDialog::onTMMChanged(const int index) -{ - if (index != 1) - { // 0 is Manual mode and 1 is Automatic mode. Handle all non 1 values as manual mode. - populateSavePaths(); - m_ui->groupBoxSavePath->setEnabled(true); - m_ui->savePath->blockSignals(false); - m_ui->downloadPath->blockSignals(false); - } - else - { - m_ui->groupBoxSavePath->setEnabled(false); - - const auto *btSession = BitTorrent::Session::instance(); - - m_ui->savePath->blockSignals(true); - m_savePath = m_ui->savePath->selectedPath(); - const Path savePath = btSession->categorySavePath(m_ui->categoryComboBox->currentText()); - m_ui->savePath->setSelectedPath(savePath); - - m_ui->downloadPath->blockSignals(true); - m_downloadPath = m_ui->downloadPath->selectedPath(); - const Path downloadPath = btSession->categoryDownloadPath(m_ui->categoryComboBox->currentText()); - m_ui->downloadPath->setSelectedPath(downloadPath); - - m_useDownloadPath = m_ui->groupBoxDownloadPath->isChecked(); - m_ui->groupBoxDownloadPath->setChecked(!downloadPath.isEmpty()); - } -} diff --git a/src/gui/watchedfolderoptionsdialog.h b/src/gui/watchedfolderoptionsdialog.h index 4292b5001..2029e5d03 100644 --- a/src/gui/watchedfolderoptionsdialog.h +++ b/src/gui/watchedfolderoptionsdialog.h @@ -1,6 +1,6 @@ /* * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2021 Vladimir Golovnev + * Copyright (C) 2021-2023 Vladimir Golovnev * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -30,7 +30,6 @@ #include -#include "base/path.h" #include "base/settingvalue.h" #include "base/torrentfileswatcher.h" @@ -39,6 +38,8 @@ namespace Ui class WatchedFolderOptionsDialog; } +class AddTorrentParamsWidget; + class WatchedFolderOptionsDialog final : public QDialog { Q_OBJECT @@ -58,8 +59,6 @@ private: void onCategoryChanged(int index); Ui::WatchedFolderOptionsDialog *m_ui = nullptr; - Path m_savePath; - Path m_downloadPath; - bool m_useDownloadPath = false; + AddTorrentParamsWidget *m_addTorrentParamsWidget = nullptr; SettingValue m_storeDialogSize; }; diff --git a/src/gui/watchedfolderoptionsdialog.ui b/src/gui/watchedfolderoptionsdialog.ui index 1e14ae385..1633ea342 100644 --- a/src/gui/watchedfolderoptionsdialog.ui +++ b/src/gui/watchedfolderoptionsdialog.ui @@ -7,7 +7,7 @@ 0 0 462 - 364 + 392 @@ -42,267 +42,24 @@ - - - Qt::Horizontal - - - false + + + Torrent parameters - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Torrent parameters - - - - - - - - Torrent Management Mode: - - - - - - - Automatic mode means that various torrent properties(eg save path) will be decided by the associated category - - - - Manual - - - - - Automatic - - - - - - - - Qt::Horizontal - - - - 20 - 20 - - - - - - - - - - Save at - - - - - - - - - Use another path for incomplete torrents - - - true - - - false - - - - - - - - - - - - - - - - - Category: - - - - - - - - 0 - 0 - - - - true - - - QComboBox::InsertAtTop - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Start torrent - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Add to top of queue - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Skip hash check - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Content layout: - - - - - - - 0 - - - - Original - - - - - Create subfolder - - - - - Don't create subfolder - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - + + + 0 + + + 0 + + + 0 + + + 0 + + @@ -331,20 +88,6 @@ - - - FileSystemPathLineEdit - QWidget -
gui/fspathedit.h
- 1 -
- - FileSystemPathLineEdit - QWidget -
gui/fspathedit.h
- 1 -
-