mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-10 23:07:59 +00:00
Revamp "Watched folder options" dialog
This commit is contained in:
parent
0cc29f1851
commit
93a1e58554
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2021 Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Copyright (C) 2021-2023 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
|
||||
@ -28,14 +28,9 @@
|
||||
|
||||
#include "watchedfolderoptionsdialog.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QPushButton>
|
||||
|
||||
#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<int>(&QComboBox::currentIndexChanged), this, &WatchedFolderOptionsDialog::onTMMChanged);
|
||||
connect(m_ui->categoryComboBox, qOverload<int>(&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<int>(torrentParams.contentLayout.value_or(session->torrentContentLayout())));
|
||||
|
||||
// Load categories
|
||||
QStringList categories = session->categories();
|
||||
std::sort(categories.begin(), categories.end(), Utils::Compare::NaturalLessThan<Qt::CaseInsensitive>());
|
||||
|
||||
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<BitTorrent::TorrentContentLayout>(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());
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2021 Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Copyright (C) 2021-2023 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
|
||||
@ -30,7 +30,6 @@
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
#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<QSize> m_storeDialogSize;
|
||||
};
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>462</width>
|
||||
<height>364</height>
|
||||
<height>392</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -42,267 +42,24 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<widget class="QGroupBox" name="groupBoxParameters">
|
||||
<property name="title">
|
||||
<string>Torrent parameters</string>
|
||||
</property>
|
||||
<property name="childrenCollapsible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<widget class="QFrame" name="torrentoptionsFrame">
|
||||
<layout class="QVBoxLayout" name="mainlayout_addui">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxParameters">
|
||||
<property name="title">
|
||||
<string>Torrent parameters</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="managementLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelTorrentManagementMode">
|
||||
<property name="text">
|
||||
<string>Torrent Management Mode:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboTTM">
|
||||
<property name="toolTip">
|
||||
<string>Automatic mode means that various torrent properties(eg save path) will be decided by the associated category</string>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Manual</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Automatic</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxSavePath">
|
||||
<property name="title">
|
||||
<string>Save at</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="FileSystemPathLineEdit" name="savePath" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxDownloadPath">
|
||||
<property name="title">
|
||||
<string>Use another path for incomplete torrents</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="FileSystemPathLineEdit" name="downloadPath" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="categoryLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelCategory">
|
||||
<property name="text">
|
||||
<string>Category:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="categoryComboBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="insertPolicy">
|
||||
<enum>QComboBox::InsertAtTop</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="startTorrentCheckBox">
|
||||
<property name="text">
|
||||
<string>Start torrent</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="addToQueueTopLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="addToQueueTopCheckBox">
|
||||
<property name="text">
|
||||
<string>Add to top of queue</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="addToQueueTopSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="skipCheckingLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="skipCheckingCheckBox">
|
||||
<property name="text">
|
||||
<string>Skip hash check</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="skipCheckingSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="contentLayoutLabel">
|
||||
<property name="text">
|
||||
<string>Content layout:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="contentLayoutComboBox">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Original</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Create subfolder</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Don't create subfolder</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -331,20 +88,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>FileSystemPathLineEdit</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>gui/fspathedit.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>FileSystemPathLineEdit</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>gui/fspathedit.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
|
Loading…
Reference in New Issue
Block a user