/* */ #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_(make_unique(filename.c_str(), IOFile::READ)) #else : fp_(make_unique(filename.c_str(), IOFile::READ)) #endif { } UriListParser::~UriListParser() = default; void UriListParser::parseNext(std::vector& uris, Option& op) { const std::shared_ptr& 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