/* */ #include "MetalinkPostDownloadHandler.h" #include "RequestGroup.h" #include "Metalink2RequestGroup.h" #include "Logger.h" #include "DiskAdaptor.h" #include "PieceStorage.h" #include "DownloadHandlerConstants.h" #include "ContentTypeRequestGroupCriteria.h" #include "Exception.h" #include "prefs.h" #include "Option.h" #include "DownloadContext.h" #include "download_helper.h" namespace aria2 { MetalinkPostDownloadHandler::MetalinkPostDownloadHandler() { SharedHandle cri (new ContentTypeRequestGroupCriteria (DownloadHandlerConstants::getMetalinkContentTypes().begin(), DownloadHandlerConstants::getMetalinkContentTypes().end(), DownloadHandlerConstants::getMetalinkExtensions().begin(), DownloadHandlerConstants::getMetalinkExtensions().end())); setCriteria(cri); } MetalinkPostDownloadHandler::~MetalinkPostDownloadHandler() {} void MetalinkPostDownloadHandler::getNextRequestGroups (std::vector >& groups, RequestGroup* requestGroup) { if(_logger->debug()) { _logger->debug("Generating RequestGroups for Metalink file %s", requestGroup->getFirstFilePath().c_str()); } SharedHandle diskAdaptor = requestGroup->getPieceStorage()->getDiskAdaptor(); try { diskAdaptor->openExistingFile(); //requestOption.put(PREF_DIR, requestGroup->getDownloadContext()->getDir()); std::vector > newRgs; Metalink2RequestGroup().generate(newRgs, diskAdaptor, requestGroup->getOption()); requestGroup->followedBy(newRgs.begin(), newRgs.end()); SharedHandle mi = createMetadataInfoFromFirstFileEntry(requestGroup->getDownloadContext()); if(!mi.isNull()) { setMetadataInfo(newRgs.begin(), newRgs.end(), mi); } groups.insert(groups.end(), newRgs.begin(), newRgs.end()); diskAdaptor->closeFile(); } catch(Exception& e) { diskAdaptor->closeFile(); throw; } } } // namespace aria2