/* */ #include "metalink_helper.h" #include "Option.h" #include "MetalinkEntry.h" #include "MetalinkParserStateMachine.h" #include "Metalinker.h" #include "MetalinkProcessor.h" #include "prefs.h" #include "DlAbortEx.h" #include "BinaryStream.h" #include "MetalinkMetaurl.h" namespace aria2 { namespace metalink { namespace { void query (std::vector >& result, const SharedHandle& metalinker, const Option* option) { metalinker->queryEntry(result, option->get(PREF_METALINK_VERSION), option->get(PREF_METALINK_LANGUAGE), option->get(PREF_METALINK_OS)); } } // namespace void parseAndQuery (std::vector >& result, const std::string& filename, const Option* option) { MetalinkProcessor proc; SharedHandle metalinker = proc.parseFile(filename); query(result, metalinker, option); } void parseAndQuery (std::vector >& result, const SharedHandle& binaryStream, const Option* option) { MetalinkProcessor proc; SharedHandle metalinker =proc.parseFromBinaryStream(binaryStream); query(result, metalinker, option); } void groupEntryByMetaurlName (std::vector< std::pair > > >& result, const std::vector >& entries) { for(std::vector >::const_iterator eiter = entries.begin(), eoi = entries.end(); eiter != eoi; ++eiter) { if((*eiter)->metaurls.empty()) { std::pair > > p; p.second.push_back(*eiter); result.push_back(p); } else { std::vector< std::pair > > >::iterator i = result.begin(); if((*eiter)->metaurls[0]->name.empty() || !(*eiter)->sizeKnown) { i = result.end(); } for(; i != result.end(); ++i) { if((*i).first == (*eiter)->metaurls[0]->url && !(*i).second[0]->metaurls[0]->name.empty()) { (*i).second.push_back(*eiter); break; } } if(i == result.end()) { std::pair > > p; p.first = (*eiter)->metaurls[0]->url; p.second.push_back(*eiter); result.push_back(p); } } } } } // namespace metalink } // namespace aria2