mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-11 07:18:08 +00:00
Add TorrentHandle::availableFileFractions() function
The function returns list of availability values for all torrent files. The availability here is different to that one in the progress bar. Here it shows what part of the file's pieces is available (i.e. we do not count availability > 1 for a piece).
This commit is contained in:
parent
d5af8722a6
commit
bc18bf1ab4
@ -1953,3 +1953,24 @@ void TorrentHandle::prioritizeFiles(const QVector<int> &priorities)
|
||||
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
QVector<qreal> TorrentHandle::availableFileFractions() const
|
||||
{
|
||||
QVector<int> piecesAvailability = pieceAvailability();
|
||||
const auto filesCount = this->filesCount();
|
||||
// libtorrent returns empty array for seeding only torrents
|
||||
if (piecesAvailability.empty()) return QVector<qreal>(filesCount, -1.);
|
||||
|
||||
QVector<qreal> res;
|
||||
res.reserve(filesCount);
|
||||
TorrentInfo info = this->info();
|
||||
for (int file = 0; file < filesCount; ++file) {
|
||||
TorrentInfo::PieceRange filePieces = info.filePieces(file);
|
||||
int availablePieces = 0;
|
||||
for (int piece = filePieces.first(); piece <= filePieces.last(); ++piece) {
|
||||
availablePieces += piecesAvailability[piece] > 0 ? 1 : 0;
|
||||
}
|
||||
res.push_back(static_cast<qreal>(availablePieces) / filePieces.size());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
@ -361,6 +361,14 @@ namespace BitTorrent
|
||||
void handleAppendExtensionToggled();
|
||||
void saveResumeData(bool updateStatus = false);
|
||||
|
||||
/**
|
||||
* @brief fraction of file pieces that are available at least from one peer
|
||||
*
|
||||
* This is not the same as torrrent availability, it is just a fraction of pieces
|
||||
* that can be downloaded right now. It varies between 0 to 1.
|
||||
*/
|
||||
QVector<qreal> availableFileFractions() const;
|
||||
|
||||
private:
|
||||
typedef boost::function<void ()> EventTrigger;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user