/* */ #include "SeedCheckCommand.h" #include "DownloadEngine.h" #include "BtRuntime.h" #include "PieceStorage.h" #include "BtContext.h" #include "Logger.h" #include "SeedCriteria.h" #include "message.h" namespace aria2 { SeedCheckCommand::SeedCheckCommand(int cuid, RequestGroup* requestGroup, DownloadEngine* e, const SharedHandle& btContext, const SeedCriteriaHandle& seedCriteria) :Command(cuid), RequestGroupAware(requestGroup), e(e), _btContext(btContext), seedCriteria(seedCriteria), checkStarted(false) { setStatusRealtime(); } bool SeedCheckCommand::execute() { if(_btRuntime->isHalt()) { return true; } if(!seedCriteria.get()) { return false; } if(!checkStarted) { if(_pieceStorage->downloadFinished()) { checkStarted = true; seedCriteria->reset(); } } if(checkStarted) { if(seedCriteria->evaluate()) { logger->notice(MSG_SEEDING_END); _btRuntime->setHalt(true); } } e->commands.push_back(this); return false; } void SeedCheckCommand::setSeedCriteria (const SharedHandle& seedCriteria) { this->seedCriteria = seedCriteria; } void SeedCheckCommand::setBtRuntime(const SharedHandle& btRuntime) { _btRuntime = btRuntime; } void SeedCheckCommand::setPieceStorage (const SharedHandle& pieceStorage) { _pieceStorage = pieceStorage; } } // namespace aria2