/* */ #include "ConsoleStatCalc.h" #include "RequestGroupMan.h" #include "RequestGroup.h" #include "FileAllocationMan.h" #include "FileAllocationEntry.h" #include "CheckIntegrityMan.h" #include "CheckIntegrityEntry.h" #include "Util.h" #ifdef ENABLE_BITTORRENT # include "BtContext.h" #endif // ENABLE_BITTORRENT #include #include namespace aria2 { void ConsoleStatCalc::calculateStat(const RequestGroupManHandle& requestGroupMan, const FileAllocationManHandle& fileAllocationMan, const CheckIntegrityManHandle& checkIntegrityMan) { if(!_cp.elapsed(1)) { return; } _cp.reset(); std::cout << "\r "; std::cout << "\r"; if(requestGroupMan->countRequestGroup() > 0) { RequestGroupHandle firstRequestGroup = requestGroupMan->getRequestGroup(0); TransferStat stat = firstRequestGroup->calculateStat(); unsigned int eta = 0; if(firstRequestGroup->getTotalLength() > 0 && stat.getDownloadSpeed() > 0) { eta = (firstRequestGroup->getTotalLength()-firstRequestGroup->getCompletedLength())/stat.getDownloadSpeed(); } std::cout << "[" << "#" << firstRequestGroup->getGID() << " "; #ifdef ENABLE_BITTORRENT if(firstRequestGroup->downloadFinished() && !BtContextHandle(firstRequestGroup->getDownloadContext()).isNull()) { std::cout << "SEEDING" << "(" << "ratio:" << std::fixed << std::setprecision(1) << ((stat.getAllTimeUploadLength()*10)/firstRequestGroup->getCompletedLength())/10.0 << ")"; } else #endif // ENABLE_BITTORRENT { std::cout << "SIZE:" << Util::abbrevSize(firstRequestGroup->getCompletedLength()) << "B" << "/" << Util::abbrevSize(firstRequestGroup->getTotalLength()) << "B"; if(firstRequestGroup->getTotalLength() > 0) { std::cout << "(" << 100*firstRequestGroup->getCompletedLength()/firstRequestGroup->getTotalLength() << "%)"; } } std::cout << " " << "CN:" << firstRequestGroup->getNumConnection(); if(!firstRequestGroup->downloadFinished()) { std::cout << " " << "SPD:" << std::fixed << std::setprecision(2) << stat.getDownloadSpeed()/1024.0 << "KiB/s"; } if(stat.getSessionUploadLength() > 0) { std::cout << " " << "UP:" << std::fixed << std::setprecision(2) << stat.getUploadSpeed()/1024.0 << "KiB/s" << "(" << Util::abbrevSize(stat.getAllTimeUploadLength()) << "B)"; } if(eta > 0) { std::cout << " " << "ETA:" << Util::secfmt(eta); } std::cout << "]"; if(requestGroupMan->countRequestGroup() > 1) { std::cout << "(" << requestGroupMan->countRequestGroup()-1 << "more...)"; } } if(requestGroupMan->countRequestGroup() > 1 && !requestGroupMan->downloadFinished()) { TransferStat stat = requestGroupMan->calculateStat(); std::cout << " " << "[TOTAL SPD:" << std::fixed << std::setprecision(2) << stat.getDownloadSpeed()/1024.0 << "KiB/s" << "]"; } { FileAllocationEntryHandle entry = fileAllocationMan->getCurrentFileAllocationEntry(); if(!entry.isNull()) { std::cout << " " << "[FileAlloc:" << "#" << entry->getRequestGroup()->getGID() << " " << Util::abbrevSize(entry->getCurrentLength()) << "B" << "/" << Util::abbrevSize(entry->getTotalLength()) << "B" << "("; if(entry->getTotalLength() > 0) { std::cout << 100*entry->getCurrentLength()/entry->getTotalLength(); } else { std::cout << "--"; } std::cout << "%)" << "]"; if(fileAllocationMan->countFileAllocationEntryInQueue() > 0) { std::cout << "(" << fileAllocationMan->countFileAllocationEntryInQueue() << "waiting...)"; } } } #ifdef ENABLE_MESSAGE_DIGEST { CheckIntegrityEntryHandle entry = checkIntegrityMan->getFirstCheckIntegrityEntry(); if(!entry.isNull()) { std::cout << " " << "[Checksum:" << "#" << entry->getRequestGroup()->getGID() << " " << Util::abbrevSize(entry->getCurrentLength()) << "B" << "/" << Util::abbrevSize(entry->getTotalLength()) << "B" << "(" << 100*entry->getCurrentLength()/entry->getTotalLength() << "%)"; std::cout << "]"; if(checkIntegrityMan->countCheckIntegrityEntry() > 1) { std::cout << "(" << checkIntegrityMan->countCheckIntegrityEntry()-1 << "more...)"; } } } #endif // ENABLE_MESSAGE_DIGEST std::cout << std::flush; } } // namespace aria2