/* */ #include "TorrentDownloadEngine.h" #include "Util.h" #include "BtRegistry.h" TorrentDownloadEngine::TorrentDownloadEngine(): filenameFixed(false), btContext(0), btRuntime(0), pieceStorage(0), peerStorage(0), btAnnounce(0), btProgressInfoFile(0) {} TorrentDownloadEngine::~TorrentDownloadEngine() { } void TorrentDownloadEngine::setBtContext(const BtContextHandle& btContext) { this->btContext = btContext; btRuntime = BT_RUNTIME(btContext); pieceStorage = PIECE_STORAGE(btContext); peerStorage = PEER_STORAGE(btContext); btAnnounce = BT_ANNOUNCE(btContext); btProgressInfoFile = BT_PROGRESS_INFO_FILE(btContext); } void TorrentDownloadEngine::onEndOfRun() { pieceStorage->getDiskAdaptor()->closeFile(); if(pieceStorage->allDownloadFinished()) { btProgressInfoFile->removeFile(); } else { btProgressInfoFile->save(); } } void TorrentDownloadEngine::initStatistics() { downloadSpeed = 0; uploadSpeed = 0; cp.reset(); startup.reset(); eta = 0; avgSpeed = 0; downloadLength = 0; uploadLength = 0; totalLength = 0; } int TorrentDownloadEngine::calculateSpeed(long long int length, int elapsed) { int nowSpeed = (int)(length/elapsed); return nowSpeed; } void TorrentDownloadEngine::calculateStat() { TransferStat stat = peerStorage->calculateStat(); if(pieceStorage->isSelectiveDownloadingMode()) { downloadLength = pieceStorage->getFilteredCompletedLength(); totalLength = pieceStorage->getFilteredTotalLength(); } else { downloadLength = pieceStorage->getCompletedLength(); totalLength = pieceStorage->getTotalLength(); } uploadLength = stat.getSessionUploadLength()+ btRuntime->getUploadLengthAtStartup(); downloadSpeed = stat.getDownloadSpeed(); uploadSpeed = stat.getUploadSpeed(); avgSpeed = calculateSpeed(stat.getSessionDownloadLength(), startup.difference()); if(avgSpeed < 0) { avgSpeed = 0; } else if(avgSpeed != 0) { eta = (totalLength-downloadLength)/avgSpeed; } } void TorrentDownloadEngine::calculateStatistics() { if(cp.difference() >= 1) { calculateStat(); sendStatistics(); cp.reset(); } }