/* */ #include "UriListParser.h" #include #include #include "util.h" #include "Option.h" #include "OptionHandlerFactory.h" #include "OptionHandler.h" #include "A2STR.h" #include "BufferedFile.h" #include "OptionParser.h" #if HAVE_ZLIB #include "GZipFile.h" #endif namespace aria2 { UriListParser::UriListParser(const std::string& filename) #if HAVE_ZLIB : fp_(new GZipFile(filename.c_str(), IOFile::READ)) #else : fp_(new BufferedFile(filename.c_str(), IOFile::READ)) #endif {} UriListParser::~UriListParser() {} void UriListParser::parseNext(std::vector& uris, Option& op) { const SharedHandle& optparser = OptionParser::getInstance(); while(1) { if(!line_.empty() && line_[0] != '#') { util::split(line_.begin(), line_.end(), std::back_inserter(uris), '\t', true); // Read options std::stringstream ss; while(1) { line_ = fp_->getLine(); if(line_.empty()) { if(fp_->eof()) { break; } else if(!fp_) { throw DL_ABORT_EX("UriListParser:I/O error."); } else { continue; } } if(line_[0] == ' ' || line_[0] == '\t') { ss << line_ << "\n"; } else if(line_[0] == '#') { continue; } else { break; } } optparser->parse(op, ss); return; } line_ = fp_->getLine(); if(line_.empty()) { if(fp_->eof()) { return; } else if(!fp_) { throw DL_ABORT_EX("UriListParser:I/O error."); } } } } bool UriListParser::hasNext() { bool rv = !line_.empty() || (fp_ && *fp_ && !fp_->eof()); if (!rv) { fp_->close(); } return rv; } } // namespace aria2