mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-31 17:04:34 +00:00
FEATURE: Torrents can be automatically paused once they reach a given ratio
This commit is contained in:
parent
4f07426010
commit
5a82aee76b
@ -11,6 +11,7 @@
|
||||
- FEATURE: Added filter for paused/error torrents
|
||||
- FEATURE: Add Check/Uncheck all feature in Web UI
|
||||
- FEATURE: Search engine can now be disabled
|
||||
- FEATURE: Torrents can be automatically paused once they reach a given ratio
|
||||
- BUGFIX: Hide seeding torrents files priorities in Web UI
|
||||
- BUGFIX: The user can disable permanently recursive torrent download
|
||||
- COSMETIC: Display peers country name in tooltip
|
||||
|
@ -210,8 +210,8 @@ ScanFoldersModel* Bittorrent::getScanFoldersModel() const {
|
||||
return m_scanFolders;
|
||||
}
|
||||
|
||||
void Bittorrent::deleteBigRatios() {
|
||||
if(ratio_limit == -1) return;
|
||||
void Bittorrent::processBigRatios() {
|
||||
if(ratio_limit <= 0) return;
|
||||
std::vector<torrent_handle> torrents = getTorrents();
|
||||
std::vector<torrent_handle>::iterator torrentIT;
|
||||
for(torrentIT = torrents.begin(); torrentIT != torrents.end(); torrentIT++) {
|
||||
@ -222,7 +222,14 @@ void Bittorrent::deleteBigRatios() {
|
||||
const float ratio = getRealRatio(hash);
|
||||
if(ratio <= MAX_RATIO && ratio > ratio_limit) {
|
||||
addConsoleMessage(tr("%1 reached the maximum ratio you set.").arg(h.name()));
|
||||
deleteTorrent(hash);
|
||||
if(high_ratio_action == REMOVE_ACTION) {
|
||||
addConsoleMessage(tr("Removing torrent %1...").arg(h.name()));
|
||||
deleteTorrent(hash);
|
||||
} else {
|
||||
// Pause it
|
||||
addConsoleMessage(tr("Pausing torrent %1...").arg(h.name()));
|
||||
pauseTorrent(hash);
|
||||
}
|
||||
//emit torrent_ratio_deleted(fileName);
|
||||
}
|
||||
}
|
||||
@ -522,7 +529,8 @@ void Bittorrent::configureSession() {
|
||||
}
|
||||
applyEncryptionSettings(encryptionSettings);
|
||||
// * Maximum ratio
|
||||
setDeleteRatio(Preferences::getDeleteRatio());
|
||||
high_ratio_action = Preferences::getMaxRatioAction();
|
||||
setMaxRatio(Preferences::getMaxRatio());
|
||||
// Ip Filter
|
||||
FilterParserThread::processFilterList(s, Preferences::bannedIPs());
|
||||
if(Preferences::isFilteringEnabled()) {
|
||||
@ -1763,12 +1771,12 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
|
||||
|
||||
// Torrents will a ratio superior to the given value will
|
||||
// be automatically deleted
|
||||
void Bittorrent::setDeleteRatio(float ratio) {
|
||||
if(ratio != -1 && ratio < 1.) ratio = 1.;
|
||||
void Bittorrent::setMaxRatio(float ratio) {
|
||||
if(ratio <= 0) ratio = -1.;
|
||||
if(ratio_limit == -1 && ratio != -1) {
|
||||
Q_ASSERT(!BigRatioTimer);
|
||||
BigRatioTimer = new QTimer(this);
|
||||
connect(BigRatioTimer, SIGNAL(timeout()), this, SLOT(deleteBigRatios()));
|
||||
connect(BigRatioTimer, SIGNAL(timeout()), this, SLOT(processBigRatios()));
|
||||
BigRatioTimer->start(5000);
|
||||
} else {
|
||||
if(ratio_limit != -1 && ratio == -1) {
|
||||
@ -1778,7 +1786,7 @@ void Bittorrent::addConsoleMessage(QString msg, QString) {
|
||||
if(ratio_limit != ratio) {
|
||||
ratio_limit = ratio;
|
||||
qDebug("* Set deleteRatio to %.1f", ratio_limit);
|
||||
deleteBigRatios();
|
||||
processBigRatios();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ public slots:
|
||||
void setMaxUploadsPerTorrent(int max);
|
||||
void setDownloadRateLimit(long rate);
|
||||
void setUploadRateLimit(long rate);
|
||||
void setDeleteRatio(float ratio);
|
||||
void setMaxRatio(float ratio);
|
||||
void setDHTPort(int dht_port);
|
||||
void setPeerProxySettings(const proxy_settings &proxySettings);
|
||||
void setHTTPProxySettings(const proxy_settings &proxySettings);
|
||||
@ -194,7 +194,7 @@ protected:
|
||||
protected slots:
|
||||
void addTorrentsFromScanFolder(QStringList&);
|
||||
void readAlerts();
|
||||
void deleteBigRatios();
|
||||
void processBigRatios();
|
||||
void takeETASamples();
|
||||
void exportTorrentFiles(QString path);
|
||||
void saveTempFastResumeData();
|
||||
@ -240,6 +240,7 @@ private:
|
||||
bool preAllocateAll;
|
||||
bool addInPause;
|
||||
float ratio_limit;
|
||||
int high_ratio_action;
|
||||
bool UPnPEnabled;
|
||||
bool NATPMPEnabled;
|
||||
bool LSDEnabled;
|
||||
|
@ -168,7 +168,7 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
connect(checkMaxConnecs, SIGNAL(toggled(bool)), this, SLOT(enableMaxConnecsLimit(bool)));
|
||||
connect(checkMaxConnecsPerTorrent, SIGNAL(toggled(bool)), this, SLOT(enableMaxConnecsLimitPerTorrent(bool)));
|
||||
connect(checkMaxUploadsPerTorrent, SIGNAL(toggled(bool)), this, SLOT(enableMaxUploadsLimitPerTorrent(bool)));
|
||||
connect(checkRatioRemove, SIGNAL(toggled(bool)), this, SLOT(enableDeleteRatio(bool)));
|
||||
connect(checkMaxRatio, SIGNAL(toggled(bool)), this, SLOT(enableMaxRatio(bool)));
|
||||
connect(comboPeerID, SIGNAL(currentIndexChanged(int)), this, SLOT(enableSpoofingSettings(int)));
|
||||
// Proxy tab
|
||||
connect(comboProxyType_http, SIGNAL(currentIndexChanged(int)),this, SLOT(enableHTTPProxy(int)));
|
||||
@ -230,8 +230,9 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
connect(client_version, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
|
||||
connect(client_build, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
|
||||
connect(comboEncryption, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton()));
|
||||
connect(checkRatioRemove, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
|
||||
connect(checkMaxRatio, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
|
||||
connect(spinMaxRatio, SIGNAL(valueChanged(QString)), this, SLOT(enableApplyButton()));
|
||||
connect(comboRatioLimitAct, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton()));
|
||||
// Proxy tab
|
||||
connect(comboProxyType_http, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton()));
|
||||
connect(textProxyIP_http, SIGNAL(textChanged(QString)), this, SLOT(enableApplyButton()));
|
||||
@ -465,7 +466,8 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
Preferences::setPeerID("qB");
|
||||
}
|
||||
settings.setValue(QString::fromUtf8("Encryption"), getEncryptionSetting());
|
||||
settings.setValue(QString::fromUtf8("MaxRatio"), getDeleteRatio());
|
||||
Preferences::setMaxRatio(getMaxRatio());
|
||||
Preferences::setMaxRatioAction(comboRatioLimitAct->currentIndex());
|
||||
// End Bittorrent preferences
|
||||
settings.endGroup();
|
||||
// Misc preferences
|
||||
@ -780,17 +782,20 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
}
|
||||
comboEncryption->setCurrentIndex(Preferences::getEncryptionSetting());
|
||||
// Ratio limit
|
||||
floatValue = Preferences::getDeleteRatio();
|
||||
if(floatValue >= 1.) {
|
||||
floatValue = Preferences::getMaxRatio();
|
||||
if(floatValue > 0.) {
|
||||
// Enable
|
||||
checkRatioRemove->setChecked(true);
|
||||
checkMaxRatio->setChecked(true);
|
||||
spinMaxRatio->setEnabled(true);
|
||||
comboRatioLimitAct->setEnabled(true);
|
||||
spinMaxRatio->setValue(floatValue);
|
||||
} else {
|
||||
// Disable
|
||||
checkRatioRemove->setChecked(false);
|
||||
checkMaxRatio->setChecked(false);
|
||||
spinMaxRatio->setEnabled(false);
|
||||
comboRatioLimitAct->setEnabled(false);
|
||||
}
|
||||
comboRatioLimitAct->setCurrentIndex(Preferences::getMaxRatioAction());
|
||||
// End Bittorrent preferences
|
||||
// Misc preferences
|
||||
// * IP Filter
|
||||
@ -957,8 +962,8 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
}
|
||||
|
||||
// Return Share ratio
|
||||
float options_imp::getDeleteRatio() const{
|
||||
if(checkRatioRemove->isChecked()){
|
||||
float options_imp::getMaxRatio() const{
|
||||
if(checkMaxRatio->isChecked()){
|
||||
return spinMaxRatio->value();
|
||||
}
|
||||
return -1;
|
||||
@ -1091,8 +1096,9 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){
|
||||
applyButton->setEnabled(true);
|
||||
}
|
||||
|
||||
void options_imp::enableDeleteRatio(bool checked){
|
||||
void options_imp::enableMaxRatio(bool checked){
|
||||
spinMaxRatio->setEnabled(checked);
|
||||
comboRatioLimitAct->setEnabled(checked);
|
||||
}
|
||||
|
||||
void options_imp::enablePeerProxy(int index){
|
||||
|
@ -96,7 +96,7 @@ protected:
|
||||
int getDHTPort() const;
|
||||
bool isLSDEnabled() const;
|
||||
int getEncryptionSetting() const;
|
||||
float getDeleteRatio() const;
|
||||
float getMaxRatio() const;
|
||||
// Proxy options
|
||||
QString getHTTPProxyIp() const;
|
||||
unsigned short getHTTPProxyPort() const;
|
||||
@ -135,7 +135,7 @@ protected slots:
|
||||
void enableMaxConnecsLimit(bool checked);
|
||||
void enableMaxConnecsLimitPerTorrent(bool checked);
|
||||
void enableMaxUploadsLimitPerTorrent(bool checked);
|
||||
void enableDeleteRatio(bool checked);
|
||||
void enableMaxRatio(bool checked);
|
||||
void enableSpoofingSettings(int index);
|
||||
void setStyle(QString style);
|
||||
void on_buttonBox_accepted();
|
||||
|
@ -53,6 +53,7 @@
|
||||
|
||||
#define QBT_REALM "Web UI Access"
|
||||
enum scheduler_days { EVERY_DAY, WEEK_DAYS, WEEK_ENDS, MON, TUE, WED, THU, FRI, SAT, SUN };
|
||||
enum maxRatioAction {PAUSE_ACTION, REMOVE_ACTION};
|
||||
|
||||
class Preferences {
|
||||
public:
|
||||
@ -693,11 +694,26 @@ public:
|
||||
settings.setValue(QString::fromUtf8("Preferences/Bittorrent/Encryption"), val);
|
||||
}
|
||||
|
||||
static float getDeleteRatio() {
|
||||
static float getMaxRatio() {
|
||||
QSettings settings("qBittorrent", "qBittorrent");
|
||||
return settings.value(QString::fromUtf8("Preferences/Bittorrent/MaxRatio"), -1).toDouble();
|
||||
}
|
||||
|
||||
static void setMaxRatio(float ratio) {
|
||||
QSettings settings("qBittorrent", "qBittorrent");
|
||||
settings.setValue(QString::fromUtf8("Preferences/Bittorrent/MaxRatio"), ratio);
|
||||
}
|
||||
|
||||
static void setMaxRatioAction(int act) {
|
||||
QSettings settings("qBittorrent", "qBittorrent");
|
||||
settings.setValue(QString::fromUtf8("Preferences/Bittorrent/MaxRatioAction"), act);
|
||||
}
|
||||
|
||||
static int getMaxRatioAction() {
|
||||
QSettings settings("qBittorrent", "qBittorrent");
|
||||
return settings.value(QString::fromUtf8("Preferences/Bittorrent/MaxRatioAction"), PAUSE_ACTION).toInt();
|
||||
}
|
||||
|
||||
// IP Filter
|
||||
static bool isFilteringEnabled() {
|
||||
QSettings settings("qBittorrent", "qBittorrent");
|
||||
|
@ -516,7 +516,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>506</width>
|
||||
<height>630</height>
|
||||
<height>504</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
@ -555,97 +555,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="checkEnableQueueing">
|
||||
<property name="title">
|
||||
<string>Torrent queueing</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_max_active_dl">
|
||||
<property name="text">
|
||||
<string>Maximum active downloads:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="spinMaxActiveDownloads">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>3</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_max_active_up">
|
||||
<property name="text">
|
||||
<string>Maximum active uploads:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="spinMaxActiveUploads">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>3</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="maxActiveTorrents_lbl">
|
||||
<property name="text">
|
||||
<string>Maximum active torrents:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="spinMaxActiveTorrents">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<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>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="fileSystemBox">
|
||||
<property name="sizePolicy">
|
||||
@ -1650,12 +1559,12 @@ QGroupBox {
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>524</width>
|
||||
<height>406</height>
|
||||
<y>-80</y>
|
||||
<width>539</width>
|
||||
<height>484</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_20">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="AddBTFeaturesBox">
|
||||
<property name="title">
|
||||
@ -1828,6 +1737,9 @@ QGroupBox {
|
||||
<string>Client whitelisting workaround</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_19">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
||||
<item>
|
||||
@ -1935,18 +1847,112 @@ QGroupBox {
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="checkEnableQueueing">
|
||||
<property name="title">
|
||||
<string>Torrent queueing</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_max_active_dl">
|
||||
<property name="text">
|
||||
<string>Maximum active downloads:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="spinMaxActiveDownloads">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>3</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_max_active_up">
|
||||
<property name="text">
|
||||
<string>Maximum active uploads:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="spinMaxActiveUploads">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>3</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="maxActiveTorrents_lbl">
|
||||
<property name="text">
|
||||
<string>Maximum active torrents:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="spinMaxActiveTorrents">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<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>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="ratioBox">
|
||||
<property name="title">
|
||||
<string>Share ratio settings</string>
|
||||
<string>Share ratio limiting</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkRatioRemove">
|
||||
<widget class="QCheckBox" name="checkMaxRatio">
|
||||
<property name="text">
|
||||
<string>Remove finished torrents when their ratio reaches:</string>
|
||||
<string>Seed torrents until their ratio reaches</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -1967,10 +1973,10 @@ QGroupBox {
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>10.000000000000000</double>
|
||||
<double>20.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
@ -1980,6 +1986,30 @@ QGroupBox {
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>then</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboRatioLimitAct">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Pause them</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Remove them</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
@ -2670,7 +2700,7 @@ QGroupBox {
|
||||
<tabstop>checkNATPMP</tabstop>
|
||||
<tabstop>checkLSD</tabstop>
|
||||
<tabstop>comboEncryption</tabstop>
|
||||
<tabstop>checkRatioRemove</tabstop>
|
||||
<tabstop>checkMaxRatio</tabstop>
|
||||
<tabstop>spinMaxRatio</tabstop>
|
||||
<tabstop>spinWebUiPort</tabstop>
|
||||
<tabstop>textWebUiUsername</tabstop>
|
||||
|
Loading…
x
Reference in New Issue
Block a user