/* */ #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, std::unique_ptr seedCriteria) : Command(cuid), requestGroup_(requestGroup), e_(e), seedCriteria_(std::move(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(std::unique_ptr(this)); return false; } void SeedCheckCommand::setBtRuntime(const std::shared_ptr& btRuntime) { btRuntime_ = btRuntime; } void SeedCheckCommand::setPieceStorage( const std::shared_ptr& pieceStorage) { pieceStorage_ = pieceStorage; } } // namespace aria2