/* */ #include "FillRequestGroupCommand.h" #include "DownloadEngine.h" #include "RequestGroupMan.h" #include "RequestGroup.h" #include "RecoverableException.h" #include "message.h" #include "Logger.h" #include "LogFactory.h" #include "DownloadContext.h" #include "fmt.h" namespace aria2 { FillRequestGroupCommand::FillRequestGroupCommand(cuid_t cuid, DownloadEngine* e): Command(cuid), e_(e) { setStatusRealtime(); } FillRequestGroupCommand::~FillRequestGroupCommand() {} bool FillRequestGroupCommand::execute() { if(e_->isHaltRequested()) { return true; } SharedHandle rgman = e_->getRequestGroupMan(); if(rgman->queueCheckRequested()) { while(rgman->queueCheckRequested()) { try { // During adding RequestGroup, // RequestGroupMan::requestQueueCheck() might be called, so // first clear it here. rgman->clearQueueCheck(); rgman->fillRequestGroupFromReserver(e_); } catch(RecoverableException& ex) { A2_LOG_ERROR_EX(EX_EXCEPTION_CAUGHT, ex); // Re-request queue check to fulfill the requests of all // downloads, some might come after this exception. rgman->requestQueueCheck(); } } if(rgman->downloadFinished()) { return true; } } e_->addRoutineCommand(this); return false; } } // namespace aria2