mirror of https://github.com/aria2/aria2
2008-05-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Refactord. * src/RequestGroupMan.cc (removeStoppedGroup) (fillRequestGroupFromReserver)pull/1/head
parent
5d8c2c0890
commit
eacb3fa04f
|
@ -1,3 +1,10 @@
|
|||
2008-05-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Refactord.
|
||||
* src/RequestGroupMan.cc
|
||||
(removeStoppedGroup)
|
||||
(fillRequestGroupFromReserver)
|
||||
|
||||
2008-05-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Fixed compile error on Ubuntu.
|
||||
|
|
|
@ -105,44 +105,73 @@ RequestGroupMan::getRequestGroups() const
|
|||
return _requestGroups;
|
||||
}
|
||||
|
||||
void RequestGroupMan::removeStoppedGroup()
|
||||
{
|
||||
unsigned int count = 0;
|
||||
RequestGroups temp;
|
||||
for(RequestGroups::iterator itr = _requestGroups.begin();
|
||||
itr != _requestGroups.end(); ++itr) {
|
||||
if((*itr)->getNumCommand() > 0) {
|
||||
temp.push_back(*itr);
|
||||
} else {
|
||||
class ProcessStoppedRequestGroup {
|
||||
private:
|
||||
std::deque<SharedHandle<RequestGroup> >& _reservedGroups;
|
||||
std::deque<SharedHandle<DownloadResult> >& _downloadResults;
|
||||
Logger* _logger;
|
||||
public:
|
||||
ProcessStoppedRequestGroup
|
||||
(std::deque<SharedHandle<RequestGroup> >& reservedGroups,
|
||||
std::deque<SharedHandle<DownloadResult> >& downloadResults):
|
||||
_reservedGroups(reservedGroups),
|
||||
_downloadResults(downloadResults),
|
||||
_logger(LogFactory::getInstance()) {}
|
||||
|
||||
void operator()(const SharedHandle<RequestGroup>& group)
|
||||
{
|
||||
if(group->getNumCommand() == 0) {
|
||||
try {
|
||||
(*itr)->closeFile();
|
||||
if((*itr)->downloadFinished()) {
|
||||
(*itr)->reportDownloadFinished();
|
||||
if((*itr)->allDownloadFinished()) {
|
||||
(*itr)->getProgressInfoFile()->removeFile();
|
||||
group->closeFile();
|
||||
if(group->downloadFinished()) {
|
||||
group->reportDownloadFinished();
|
||||
if(group->allDownloadFinished()) {
|
||||
group->getProgressInfoFile()->removeFile();
|
||||
} else {
|
||||
(*itr)->getProgressInfoFile()->save();
|
||||
group->getProgressInfoFile()->save();
|
||||
}
|
||||
RequestGroups nextGroups;
|
||||
(*itr)->postDownloadProcessing(nextGroups);
|
||||
if(nextGroups.size() > 0) {
|
||||
_logger->debug("Adding %u RequestGroups as a result of PostDownloadHandler.", nextGroups.size());
|
||||
std::copy(nextGroups.rbegin(), nextGroups.rend(), std::front_inserter(_reservedGroups));
|
||||
group->postDownloadProcessing(nextGroups);
|
||||
if(!nextGroups.empty()) {
|
||||
_logger->debug("Adding %zu RequestGroups as a result of PostDownloadHandler.", nextGroups.size());
|
||||
_reservedGroups.insert(_reservedGroups.begin(),
|
||||
nextGroups.begin(), nextGroups.end());
|
||||
}
|
||||
} else {
|
||||
(*itr)->getProgressInfoFile()->save();
|
||||
group->getProgressInfoFile()->save();
|
||||
}
|
||||
} catch(RecoverableException& ex) {
|
||||
_logger->error(EX_EXCEPTION_CAUGHT, ex);
|
||||
}
|
||||
(*itr)->releaseRuntimeResource();
|
||||
++count;
|
||||
_downloadResults.push_back((*itr)->createDownloadResult());
|
||||
group->releaseRuntimeResource();
|
||||
_downloadResults.push_back(group->createDownloadResult());
|
||||
}
|
||||
}
|
||||
_requestGroups = temp;
|
||||
if(count > 0) {
|
||||
_logger->debug("%u RequestGroup(s) deleted.", count);
|
||||
|
||||
};
|
||||
|
||||
class FindStoppedRequestGroup {
|
||||
public:
|
||||
bool operator()(const SharedHandle<RequestGroup>& group) {
|
||||
return group->getNumCommand() == 0;
|
||||
}
|
||||
};
|
||||
|
||||
void RequestGroupMan::removeStoppedGroup()
|
||||
{
|
||||
size_t numPrev = _requestGroups.size();
|
||||
|
||||
std::for_each(_requestGroups.begin(), _requestGroups.end(),
|
||||
ProcessStoppedRequestGroup(_reservedGroups, _downloadResults));
|
||||
|
||||
_requestGroups.erase(std::remove_if(_requestGroups.begin(),
|
||||
_requestGroups.end(),
|
||||
FindStoppedRequestGroup()),
|
||||
_requestGroups.end());
|
||||
|
||||
size_t numRemoved = numPrev-_requestGroups.size();
|
||||
if(numRemoved > 0) {
|
||||
_logger->debug("%zu RequestGroup(s) deleted.", numRemoved);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,7 +186,7 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
|
|||
_reservedGroups.pop_front();
|
||||
try {
|
||||
if(!groupToAdd->isDependencyResolved()) {
|
||||
temp.push_front(groupToAdd);
|
||||
temp.push_back(groupToAdd);
|
||||
continue;
|
||||
}
|
||||
Commands commands;
|
||||
|
@ -170,7 +199,7 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
|
|||
_downloadResults.push_back(groupToAdd->createDownloadResult());
|
||||
}
|
||||
}
|
||||
std::copy(temp.begin(), temp.end(), std::front_inserter(_reservedGroups));
|
||||
_reservedGroups.insert(_reservedGroups.begin(), temp.begin(), temp.end());
|
||||
if(count > 0) {
|
||||
e->setNoWait(true);
|
||||
_logger->debug("%d RequestGroup(s) added.", count);
|
||||
|
|
Loading…
Reference in New Issue