|
|
@ -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()) |
|
|
|