Browse Source

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).
adaptive-webui-19844
Eugene Shalygin 9 years ago
parent
commit
bc18bf1ab4
  1. 21
      src/base/bittorrent/torrenthandle.cpp
  2. 8
      src/base/bittorrent/torrenthandle.h

21
src/base/bittorrent/torrenthandle.cpp

@ -1953,3 +1953,24 @@ void TorrentHandle::prioritizeFiles(const QVector<int> &priorities) @@ -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;
}

8
src/base/bittorrent/torrenthandle.h

@ -361,6 +361,14 @@ namespace BitTorrent @@ -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…
Cancel
Save