Browse Source

Fix Bandwidth Scheduler. Closes #3376.

adaptive-webui-19844
Vladimir Golovnev (Glassez) 9 years ago
parent
commit
64ebc5cfd6
  1. 61
      src/core/bittorrent/session.cpp
  2. 2
      src/core/bittorrent/session.h
  3. 4
      src/gui/statusbar.cpp

61
src/core/bittorrent/session.cpp

@ -569,7 +569,7 @@ void Session::configure()
if (pref->isSchedulerEnabled()) { if (pref->isSchedulerEnabled()) {
if (!m_bwScheduler) { if (!m_bwScheduler) {
m_bwScheduler = new BandwidthScheduler(this); 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(); m_bwScheduler->start();
} }
@ -780,6 +780,11 @@ void Session::handleRedirectedToMagnet(const QString &url, const QString &magnet
addTorrent_impl(m_downloadedTorrents.take(url), MagnetUri(magnetUri)); addTorrent_impl(m_downloadedTorrents.take(url), MagnetUri(magnetUri));
} }
void Session::switchToAlternativeMode(bool alternative)
{
changeSpeedLimitMode_impl(alternative);
}
// Add to BitTorrent session the downloaded torrent file // Add to BitTorrent session the downloaded torrent file
void Session::handleDownloadFinished(const QString &url, const QString &filePath) 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) void Session::changeSpeedLimitMode(bool alternative)
{ {
qDebug() << Q_FUNC_INFO << alternative;
// Save new state to remember it on startup
Preferences* const pref = Preferences::instance(); Preferences* const pref = Preferences::instance();
// Stop the scheduler when the user has manually changed the bandwidth mode // Stop the scheduler when the user has manually changed the bandwidth mode
if (!pref->isSchedulerEnabled()) if (pref->isSchedulerEnabled()) {
pref->setSchedulerEnabled(false);
delete m_bwScheduler; 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 changeSpeedLimitMode_impl(alternative);
emit speedLimitModeChanged(alternative);
} }
// Return the torrent handle, given its hash // 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) void Session::generateResumeData(bool final)
{ {
foreach (TorrentHandle *const torrent, m_torrents) { foreach (TorrentHandle *const torrent, m_torrents) {

2
src/core/bittorrent/session.h

@ -225,6 +225,7 @@ namespace BitTorrent
void handleDownloadFinished(const QString &url, const QString &filePath); void handleDownloadFinished(const QString &url, const QString &filePath);
void handleDownloadFailed(const QString &url, const QString &reason); void handleDownloadFailed(const QString &url, const QString &reason);
void handleRedirectedToMagnet(const QString &url, const QString &magnetUri); void handleRedirectedToMagnet(const QString &url, const QString &magnetUri);
void switchToAlternativeMode(bool alternative);
private: private:
explicit Session(QObject *parent = 0); explicit Session(QObject *parent = 0);
@ -249,6 +250,7 @@ namespace BitTorrent
void setMaxUploadsPerTorrent(int max); void setMaxUploadsPerTorrent(int max);
void enableLSD(bool enable); void enableLSD(bool enable);
void enableDHT(bool enable); void enableDHT(bool enable);
void changeSpeedLimitMode_impl(bool alternative);
void setAppendLabelToSavePath(bool append); void setAppendLabelToSavePath(bool append);
void setAppendExtension(bool append); void setAppendExtension(bool append);

4
src/gui/statusbar.cpp

@ -208,10 +208,8 @@ void StatusBar::updateAltSpeedsBtn(bool alternative) {
void StatusBar::toggleAlternativeSpeeds() { void StatusBar::toggleAlternativeSpeeds() {
Preferences* const pref = Preferences::instance(); Preferences* const pref = Preferences::instance();
if (pref->isSchedulerEnabled()) { if (pref->isSchedulerEnabled())
pref->setSchedulerEnabled(false);
m_bar->showMessage(tr("Manual change of rate limits mode. The scheduler is disabled."), 5000); m_bar->showMessage(tr("Manual change of rate limits mode. The scheduler is disabled."), 5000);
}
BitTorrent::Session::instance()->changeSpeedLimitMode(!pref->isAltBandwidthEnabled()); BitTorrent::Session::instance()->changeSpeedLimitMode(!pref->isAltBandwidthEnabled());
} }

Loading…
Cancel
Save