/* */ #include "SeedCheckCommand.h" #include "DownloadEngine.h" #include "BtRuntime.h" #include "PieceStorage.h" #include "Logger.h" #include "LogFactory.h" #include "SeedCriteria.h" #include "message.h" #include "RequestGroup.h" #include "fmt.h" namespace aria2 { SeedCheckCommand::SeedCheckCommand (cuid_t cuid, RequestGroup* requestGroup, DownloadEngine* e, const SharedHandle& seedCriteria) : Command(cuid), requestGroup_(requestGroup), e_(e), seedCriteria_(seedCriteria), checkStarted_(false) { setStatusRealtime(); requestGroup_->increaseNumCommand(); } SeedCheckCommand::~SeedCheckCommand() { requestGroup_->decreaseNumCommand(); } 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()) { A2_LOG_NOTICE(MSG_SEEDING_END); btRuntime_->setHalt(true); } } e_->addCommand(this); return false; } void SeedCheckCommand::setSeedCriteria (const SharedHandle& seedCriteria) { seedCriteria_ = seedCriteria; } void SeedCheckCommand::setBtRuntime(const SharedHandle& btRuntime) { btRuntime_ = btRuntime; } void SeedCheckCommand::setPieceStorage (const SharedHandle& pieceStorage) { pieceStorage_ = pieceStorage; } } // namespace aria2