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