diff --git a/src/core/bittorrent/session.cpp b/src/core/bittorrent/session.cpp index 207112fa3..89047d51d 100644 --- a/src/core/bittorrent/session.cpp +++ b/src/core/bittorrent/session.cpp @@ -569,7 +569,7 @@ void Session::configure() if (pref->isSchedulerEnabled()) { if (!m_bwScheduler) { m_bwScheduler = new BandwidthScheduler(this); - connect(m_bwScheduler, SIGNAL(switchToAlternativeMode(bool)), this, SLOT(changeSpeedLimitMode(bool))); + connect(m_bwScheduler.data(), SIGNAL(switchToAlternativeMode(bool)), this, SLOT(switchToAlternativeMode(bool))); } m_bwScheduler->start(); } @@ -780,6 +780,11 @@ void Session::handleRedirectedToMagnet(const QString &url, const QString &magnet addTorrent_impl(m_downloadedTorrents.take(url), MagnetUri(magnetUri)); } +void Session::switchToAlternativeMode(bool alternative) +{ + changeSpeedLimitMode_impl(alternative); +} + // Add to BitTorrent session the downloaded torrent file void Session::handleDownloadFinished(const QString &url, const QString &filePath) { @@ -790,32 +795,14 @@ void Session::handleDownloadFinished(const QString &url, const QString &filePath void Session::changeSpeedLimitMode(bool alternative) { - qDebug() << Q_FUNC_INFO << alternative; - // Save new state to remember it on startup Preferences* const pref = Preferences::instance(); // Stop the scheduler when the user has manually changed the bandwidth mode - if (!pref->isSchedulerEnabled()) + if (pref->isSchedulerEnabled()) { + pref->setSchedulerEnabled(false); delete m_bwScheduler; - pref->setAltBandwidthEnabled(alternative); - - // Apply settings to the bittorrent session - int downLimit = alternative ? pref->getAltGlobalDownloadLimit() : pref->getGlobalDownloadLimit(); - if (downLimit <= 0) - downLimit = -1; - else - downLimit *= 1024; - setDownloadRateLimit(downLimit); - - // Upload rate - int upLimit = alternative ? pref->getAltGlobalUploadLimit() : pref->getGlobalUploadLimit(); - if (upLimit <= 0) - upLimit = -1; - else - upLimit *= 1024; - setUploadRateLimit(upLimit); + } - // Notify - emit speedLimitModeChanged(alternative); + changeSpeedLimitMode_impl(alternative); } // Return the torrent handle, given its hash @@ -1396,6 +1383,34 @@ void Session::enableDHT(bool enable) } } +void Session::changeSpeedLimitMode_impl(bool alternative) +{ + qDebug() << Q_FUNC_INFO << alternative; + Preferences* const pref = Preferences::instance(); + + // Save new state to remember it on startup + pref->setAltBandwidthEnabled(alternative); + + // Apply settings to the bittorrent session + int downLimit = alternative ? pref->getAltGlobalDownloadLimit() : pref->getGlobalDownloadLimit(); + if (downLimit <= 0) + downLimit = -1; + else + downLimit *= 1024; + setDownloadRateLimit(downLimit); + + // Upload rate + int upLimit = alternative ? pref->getAltGlobalUploadLimit() : pref->getGlobalUploadLimit(); + if (upLimit <= 0) + upLimit = -1; + else + upLimit *= 1024; + setUploadRateLimit(upLimit); + + // Notify + emit speedLimitModeChanged(alternative); +} + void Session::generateResumeData(bool final) { foreach (TorrentHandle *const torrent, m_torrents) { diff --git a/src/core/bittorrent/session.h b/src/core/bittorrent/session.h index f8108a2ec..a5c4a6055 100644 --- a/src/core/bittorrent/session.h +++ b/src/core/bittorrent/session.h @@ -225,6 +225,7 @@ namespace BitTorrent void handleDownloadFinished(const QString &url, const QString &filePath); void handleDownloadFailed(const QString &url, const QString &reason); void handleRedirectedToMagnet(const QString &url, const QString &magnetUri); + void switchToAlternativeMode(bool alternative); private: explicit Session(QObject *parent = 0); @@ -249,6 +250,7 @@ namespace BitTorrent void setMaxUploadsPerTorrent(int max); void enableLSD(bool enable); void enableDHT(bool enable); + void changeSpeedLimitMode_impl(bool alternative); void setAppendLabelToSavePath(bool append); void setAppendExtension(bool append); diff --git a/src/gui/statusbar.cpp b/src/gui/statusbar.cpp index 083fc08d4..47cab07cd 100644 --- a/src/gui/statusbar.cpp +++ b/src/gui/statusbar.cpp @@ -208,10 +208,8 @@ void StatusBar::updateAltSpeedsBtn(bool alternative) { void StatusBar::toggleAlternativeSpeeds() { Preferences* const pref = Preferences::instance(); - if (pref->isSchedulerEnabled()) { - pref->setSchedulerEnabled(false); + if (pref->isSchedulerEnabled()) m_bar->showMessage(tr("Manual change of rate limits mode. The scheduler is disabled."), 5000); - } BitTorrent::Session::instance()->changeSpeedLimitMode(!pref->isAltBandwidthEnabled()); }