Browse Source

Merge pull request #17363 from Chocobo1/pause

Add workaround for payload upload/download rate
adaptive-webui-19844
Chocobo1 2 years ago committed by GitHub
parent
commit
ce0e92e12a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 103
      src/base/bittorrent/torrentimpl.cpp
  2. 2
      src/base/bittorrent/torrentimpl.h

103
src/base/bittorrent/torrentimpl.cpp

@ -838,47 +838,80 @@ bool TorrentImpl::isChecking() const
bool TorrentImpl::isDownloading() const bool TorrentImpl::isDownloading() const
{ {
return m_state == TorrentState::Downloading switch (m_state)
|| m_state == TorrentState::DownloadingMetadata {
|| m_state == TorrentState::ForcedDownloadingMetadata case TorrentState::Downloading:
|| m_state == TorrentState::StalledDownloading case TorrentState::DownloadingMetadata:
|| m_state == TorrentState::CheckingDownloading case TorrentState::ForcedDownloadingMetadata:
|| m_state == TorrentState::PausedDownloading case TorrentState::StalledDownloading:
|| m_state == TorrentState::QueuedDownloading case TorrentState::CheckingDownloading:
|| m_state == TorrentState::ForcedDownloading; case TorrentState::PausedDownloading:
case TorrentState::QueuedDownloading:
case TorrentState::ForcedDownloading:
return true;
default:
break;
};
return false;
} }
bool TorrentImpl::isUploading() const bool TorrentImpl::isUploading() const
{ {
return m_state == TorrentState::Uploading switch (m_state)
|| m_state == TorrentState::StalledUploading {
|| m_state == TorrentState::CheckingUploading case TorrentState::Uploading:
|| m_state == TorrentState::QueuedUploading case TorrentState::StalledUploading:
|| m_state == TorrentState::ForcedUploading; case TorrentState::CheckingUploading:
case TorrentState::QueuedUploading:
case TorrentState::ForcedUploading:
return true;
default:
break;
};
return false;
} }
bool TorrentImpl::isCompleted() const bool TorrentImpl::isCompleted() const
{ {
return m_state == TorrentState::Uploading switch (m_state)
|| m_state == TorrentState::StalledUploading {
|| m_state == TorrentState::CheckingUploading case TorrentState::Uploading:
|| m_state == TorrentState::PausedUploading case TorrentState::StalledUploading:
|| m_state == TorrentState::QueuedUploading case TorrentState::CheckingUploading:
|| m_state == TorrentState::ForcedUploading; case TorrentState::PausedUploading:
case TorrentState::QueuedUploading:
case TorrentState::ForcedUploading:
return true;
default:
break;
};
return false;
} }
bool TorrentImpl::isActive() const bool TorrentImpl::isActive() const
{ {
if (m_state == TorrentState::StalledDownloading) switch (m_state)
{
case TorrentState::StalledDownloading:
return (uploadPayloadRate() > 0); return (uploadPayloadRate() > 0);
return m_state == TorrentState::DownloadingMetadata case TorrentState::DownloadingMetadata:
|| m_state == TorrentState::ForcedDownloadingMetadata case TorrentState::ForcedDownloadingMetadata:
|| m_state == TorrentState::Downloading case TorrentState::Downloading:
|| m_state == TorrentState::ForcedDownloading case TorrentState::ForcedDownloading:
|| m_state == TorrentState::Uploading case TorrentState::Uploading:
|| m_state == TorrentState::ForcedUploading case TorrentState::ForcedUploading:
|| m_state == TorrentState::Moving; case TorrentState::Moving:
return true;
default:
break;
};
return false;
} }
bool TorrentImpl::isInactive() const bool TorrentImpl::isInactive() const
@ -888,8 +921,8 @@ bool TorrentImpl::isInactive() const
bool TorrentImpl::isErrored() const bool TorrentImpl::isErrored() const
{ {
return m_state == TorrentState::MissingFiles return ((m_state == TorrentState::MissingFiles)
|| m_state == TorrentState::Error; || (m_state == TorrentState::Error));
} }
bool TorrentImpl::isSeed() const bool TorrentImpl::isSeed() const
@ -1038,7 +1071,7 @@ qlonglong TorrentImpl::eta() const
{ {
if (isPaused()) return MAX_ETA; if (isPaused()) return MAX_ETA;
const SpeedSampleAvg speedAverage = m_speedMonitor.average(); const SpeedSampleAvg speedAverage = m_payloadRateMonitor.average();
if (isSeed()) if (isSeed())
{ {
@ -1296,12 +1329,14 @@ qreal TorrentImpl::realRatio() const
int TorrentImpl::uploadPayloadRate() const int TorrentImpl::uploadPayloadRate() const
{ {
return m_nativeStatus.upload_payload_rate; // workaround: suppress the speed for paused state
return isPaused() ? 0 : m_nativeStatus.upload_payload_rate;
} }
int TorrentImpl::downloadPayloadRate() const int TorrentImpl::downloadPayloadRate() const
{ {
return m_nativeStatus.download_payload_rate; // workaround: suppress the speed for paused state
return isPaused() ? 0 : m_nativeStatus.download_payload_rate;
} }
qlonglong TorrentImpl::totalPayloadUpload() const qlonglong TorrentImpl::totalPayloadUpload() const
@ -1611,7 +1646,7 @@ void TorrentImpl::pause()
setAutoManaged(false); setAutoManaged(false);
m_nativeHandle.pause(); m_nativeHandle.pause();
m_speedMonitor.reset(); m_payloadRateMonitor.reset();
} }
} }
@ -2114,7 +2149,7 @@ void TorrentImpl::updateStatus(const lt::torrent_status &nativeStatus)
m_nativeStatus = nativeStatus; m_nativeStatus = nativeStatus;
updateState(); updateState();
m_speedMonitor.addSample({nativeStatus.download_payload_rate m_payloadRateMonitor.addSample({nativeStatus.download_payload_rate
, nativeStatus.upload_payload_rate}); , nativeStatus.upload_payload_rate});
if (hasMetadata()) if (hasMetadata())

2
src/base/bittorrent/torrentimpl.h

@ -298,7 +298,7 @@ namespace BitTorrent
QHash<lt::file_index_t, int> m_indexMap; QHash<lt::file_index_t, int> m_indexMap;
QVector<DownloadPriority> m_filePriorities; QVector<DownloadPriority> m_filePriorities;
QBitArray m_completedFiles; QBitArray m_completedFiles;
SpeedMonitor m_speedMonitor; SpeedMonitor m_payloadRateMonitor;
InfoHash m_infoHash; InfoHash m_infoHash;

Loading…
Cancel
Save