/* */ #include "ConsoleDownloadEngine.h" #include "Util.h" ConsoleDownloadEngine::ConsoleDownloadEngine() {} ConsoleDownloadEngine::~ConsoleDownloadEngine() {} void ConsoleDownloadEngine::sendStatistics(long long int currentSize, long long int totalSize) { printf("\r "); printf("\r"); printf("%s/%s Bytes %d%% %s %.2f KB/s %d connections", Util::llitos(currentSize, true).c_str(), Util::llitos(totalSize, true).c_str(), (totalSize == 0 ? 0 : (int)((currentSize*100)/totalSize)), avgSpeed == 0 ? "-" : Util::secfmt(eta).c_str(), speed/1024.0, commands.size()); fflush(stdout); } void ConsoleDownloadEngine::initStatistics() { cp.reset(); startup.reset(); speed = 0; psize = 0; avgSpeed = 0; eta = 0; startupLength = 0; isStartupLengthSet = false; } void ConsoleDownloadEngine::calculateStatistics() { long long int dlSize = segmentMan->getDownloadedSize(); if(!isStartupLengthSet && dlSize > 0) { startupLength = dlSize; isStartupLengthSet = true; } int elapsed = cp.difference(); if(elapsed >= 1) { int nspeed = (int)((dlSize-psize)/elapsed); speed = (nspeed+speed)/2; cp.reset(); psize = dlSize; int elapsedFromStartup = startup.difference(); if(elapsedFromStartup > 0) { avgSpeed = (int)((dlSize-startupLength)/elapsedFromStartup); } if(avgSpeed < 0) { avgSpeed = 0; } else if(avgSpeed != 0 && segmentMan->totalSize > 0) { eta = (segmentMan->totalSize-dlSize)/avgSpeed; } sendStatistics(dlSize, segmentMan->totalSize); } } void ConsoleDownloadEngine::onEndOfRun() { segmentMan->diskWriter->closeFile(); if(segmentMan->finished()) { segmentMan->remove(); } else { segmentMan->save(); } }