/* */ #include "ContentTypeRequestGroupCriteria.h" #include "RequestGroup.h" #include "SingleFileDownloadContext.h" #include "Util.h" #include "FileEntry.h" namespace aria2 { ContentTypeRequestGroupCriteria::ContentTypeRequestGroupCriteria(const std::deque& contentTypes, const std::deque& extensions): _contentTypes(contentTypes), _extensions(extensions) {} ContentTypeRequestGroupCriteria::~ContentTypeRequestGroupCriteria() {} bool ContentTypeRequestGroupCriteria::match(const RequestGroup* requestGroup) const { if(forwardMatch(requestGroup->getFilePath(), _extensions)) { return true; } else { SingleFileDownloadContextHandle dctx = requestGroup->getDownloadContext(); if(dctx.isNull()) { return false; } else { return exactMatch(dctx->getContentType(), _contentTypes); } } } bool ContentTypeRequestGroupCriteria::forwardMatch(const std::string& target, const std::deque& candidates) const { for(std::deque::const_iterator itr = candidates.begin(); itr != candidates.end(); ++itr) { if(Util::endsWith(target, *itr)) { return true; } } return false; } bool ContentTypeRequestGroupCriteria::exactMatch(const std::string& target, const std::deque& candidates) const { for(std::deque::const_iterator itr = candidates.begin(); itr != candidates.end(); ++itr) { if(target == *itr) { return true; } } return false; } } // namespace aria2