diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp
index 434a4bce9..0a4a06bd3 100644
--- a/src/base/bittorrent/session.cpp
+++ b/src/base/bittorrent/session.cpp
@@ -330,7 +330,7 @@ Session::Session(QObject *parent)
, m_altGlobalUploadSpeedLimit(BITTORRENT_SESSION_KEY("AlternativeGlobalUPSpeedLimit"), 10, lowerLimited(0))
, m_isAltGlobalSpeedLimitEnabled(BITTORRENT_SESSION_KEY("UseAlternativeGlobalSpeedLimit"), false)
, m_isBandwidthSchedulerEnabled(BITTORRENT_SESSION_KEY("BandwidthSchedulerEnabled"), false)
- , m_saveResumeDataInterval(BITTORRENT_SESSION_KEY("SaveResumeDataInterval"), 3)
+ , m_saveResumeDataInterval(BITTORRENT_SESSION_KEY("SaveResumeDataInterval"), 60)
, m_port(BITTORRENT_SESSION_KEY("Port"), 8999)
, m_useRandomPort(BITTORRENT_SESSION_KEY("UseRandomPort"), false)
, m_networkInterface(BITTORRENT_SESSION_KEY("Interface"))
@@ -510,11 +510,6 @@ Session::Session(QObject *parent)
connect(m_refreshTimer, &QTimer::timeout, this, &Session::refresh);
m_refreshTimer->start();
- // Regular saving of fastresume data
- m_resumeDataTimer = new QTimer(this);
- m_resumeDataTimer->setInterval(saveResumeDataInterval() * 60 * 1000);
- connect(m_resumeDataTimer, &QTimer::timeout, this, [this]() { generateResumeData(); });
-
m_statistics = new Statistics(this);
updateSeedingLimitTimer();
@@ -536,7 +531,15 @@ Session::Session(QObject *parent)
m_resumeDataSavingManager->moveToThread(m_ioThread);
connect(m_ioThread, &QThread::finished, m_resumeDataSavingManager, &QObject::deleteLater);
m_ioThread->start();
- m_resumeDataTimer->start();
+
+ // Regular saving of fastresume data
+ m_resumeDataTimer = new QTimer(this);
+ connect(m_resumeDataTimer, &QTimer::timeout, this, [this]() { generateResumeData(); });
+ const uint saveInterval = saveResumeDataInterval();
+ if (saveInterval > 0) {
+ m_resumeDataTimer->setInterval(saveInterval * 60 * 1000);
+ m_resumeDataTimer->start();
+ }
// initialize PortForwarder instance
Net::PortForwarder::initInstance(m_nativeSession);
@@ -2704,11 +2707,19 @@ uint Session::saveResumeDataInterval() const
return m_saveResumeDataInterval;
}
-void Session::setSaveResumeDataInterval(uint value)
+void Session::setSaveResumeDataInterval(const uint value)
{
- if (value != saveResumeDataInterval()) {
- m_saveResumeDataInterval = value;
+ if (value == m_saveResumeDataInterval)
+ return;
+
+ m_saveResumeDataInterval = value;
+
+ if (value > 0) {
m_resumeDataTimer->setInterval(value * 60 * 1000);
+ m_resumeDataTimer->start();
+ }
+ else {
+ m_resumeDataTimer->stop();
}
}
diff --git a/src/gui/aboutdialog.ui b/src/gui/aboutdialog.ui
index 00356c755..a21b35394 100644
--- a/src/gui/aboutdialog.ui
+++ b/src/gui/aboutdialog.ui
@@ -450,8 +450,6 @@
-
-
-
+
diff --git a/src/gui/advancedsettings.cpp b/src/gui/advancedsettings.cpp
index 5674043c5..69f559913 100644
--- a/src/gui/advancedsettings.cpp
+++ b/src/gui/advancedsettings.cpp
@@ -28,6 +28,8 @@
#include "advancedsettings.h"
+#include
+
#include
#include
#include
@@ -129,6 +131,8 @@ AdvancedSettings::AdvancedSettings(QWidget *parent)
, this, &AdvancedSettings::updateCacheSpinSuffix);
connect(&comboBoxInterface, static_cast(&QComboBox::currentIndexChanged)
, this, &AdvancedSettings::updateInterfaceAddressCombo);
+ connect(&spinBoxSaveResumeDataInterval, static_cast(&QSpinBox::valueChanged)
+ , this, &AdvancedSettings::updateSaveResumeDataIntervalSuffix);
// Load settings
loadAdvancedSettings();
resizeColumnToContents(0);
@@ -241,6 +245,14 @@ void AdvancedSettings::updateCacheSpinSuffix(int value)
spinBoxCache.setSuffix(tr(" MiB"));
}
+void AdvancedSettings::updateSaveResumeDataIntervalSuffix(const int value)
+{
+ if (value > 0)
+ spinBoxSaveResumeDataInterval.setSuffix(tr(" min", " minutes"));
+ else
+ spinBoxSaveResumeDataInterval.setSuffix(tr(" (disabled)"));
+}
+
void AdvancedSettings::updateInterfaceAddressCombo()
{
// Try to get the currently selected interface name
@@ -346,10 +358,10 @@ void AdvancedSettings::loadAdvancedSettings()
spinBoxSendBufferWatermarkFactor.setValue(session->sendBufferWatermarkFactor());
addRow(SEND_BUF_WATERMARK_FACTOR, tr("Send buffer watermark factor"), &spinBoxSendBufferWatermarkFactor);
// Save resume data interval
- spinBoxSaveResumeDataInterval.setMinimum(1);
- spinBoxSaveResumeDataInterval.setMaximum(1440);
+ spinBoxSaveResumeDataInterval.setMinimum(0);
+ spinBoxSaveResumeDataInterval.setMaximum(std::numeric_limits::max());
spinBoxSaveResumeDataInterval.setValue(session->saveResumeDataInterval());
- spinBoxSaveResumeDataInterval.setSuffix(tr(" m", " minutes"));
+ updateSaveResumeDataIntervalSuffix(spinBoxSaveResumeDataInterval.value());
addRow(SAVE_RESUME_DATA_INTERVAL, tr("Save resume data interval", "How often the fastresume file is saved."), &spinBoxSaveResumeDataInterval);
// Outgoing port Min
spinBoxOutgoingPortsMin.setMinimum(0);
diff --git a/src/gui/advancedsettings.h b/src/gui/advancedsettings.h
index f784d0016..61588a32b 100644
--- a/src/gui/advancedsettings.h
+++ b/src/gui/advancedsettings.h
@@ -51,6 +51,7 @@ signals:
private slots:
void updateCacheSpinSuffix(int value);
+ void updateSaveResumeDataIntervalSuffix(int value);
void updateInterfaceAddressCombo();
private:
diff --git a/src/gui/optionsdialog.ui b/src/gui/optionsdialog.ui
index c35d49072..fa7a0688d 100644
--- a/src/gui/optionsdialog.ui
+++ b/src/gui/optionsdialog.ui
@@ -3460,9 +3460,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.
DNSUsernameTxt
DNSPasswordTxt
-
-
-
+
checkUploadLimit