mirror of https://github.com/aria2/aria2
				
				
				
			Added --deferred-input option.
If true is given to --deferred-input option, aria2 does not read all URIs and options from file specified by -i option at startup, but it reads one by one when it needs later. This may reduce memory usage if input file contains a lot of URIs to download. If false is given, aria2 reads all URIs and options at startup. This option defaults to false.pull/9/head
							parent
							
								
									b8121faf93
								
							
						
					
					
						commit
						f2d55f0edc
					
				|  | @ -42,6 +42,7 @@ Basic Options | ||||||
|   URI. This optional line must start with one or more white spaces and have |   URI. This optional line must start with one or more white spaces and have | ||||||
|   one option per single line. |   one option per single line. | ||||||
|   See *<<_input_file, Input File>>* subsection for details. |   See *<<_input_file, Input File>>* subsection for details. | ||||||
|  |   See also *<<aria2_optref_deferred_input, --deferred-input>>* option. | ||||||
| 
 | 
 | ||||||
| [[aria2_optref_log]]*-l*, *--log*=LOG:: | [[aria2_optref_log]]*-l*, *--log*=LOG:: | ||||||
|   The file name of the log file. If '-' is specified, log is written to |   The file name of the log file. If '-' is specified, log is written to | ||||||
|  | @ -916,6 +917,16 @@ Advanced Options | ||||||
|   and standard input, standard output and standard error will be |   and standard input, standard output and standard error will be | ||||||
|   redirected to '/dev/null'. Default: 'false' |   redirected to '/dev/null'. Default: 'false' | ||||||
| 
 | 
 | ||||||
|  | [[aria2_optref_deferred_input]]*--deferred-input*[='true'|'false']:: | ||||||
|  | 
 | ||||||
|  |   If 'true' is given, aria2 does not read all URIs and options from file | ||||||
|  |   specified by *<<aria2_optref_input_file, -i>>* option at startup, | ||||||
|  |   but it reads one by one when it | ||||||
|  |   needs later. This may reduce memory usage if input file contains a | ||||||
|  |   lot of URIs to download.  If 'false' is given, aria2 reads all URIs | ||||||
|  |   and options at startup. | ||||||
|  |   Default: 'false' | ||||||
|  | 
 | ||||||
| [[aria2_optref_disable_ipv6]]*--disable-ipv6*[='true'|'false']:: | [[aria2_optref_disable_ipv6]]*--disable-ipv6*[='true'|'false']:: | ||||||
| 
 | 
 | ||||||
|   Disable IPv6. This is useful if you have to use broken DNS and want |   Disable IPv6. This is useful if you have to use broken DNS and want | ||||||
|  |  | ||||||
|  | @ -60,6 +60,7 @@ | ||||||
| #include "fmt.h" | #include "fmt.h" | ||||||
| #include "SocketCore.h" | #include "SocketCore.h" | ||||||
| #include "OutputFile.h" | #include "OutputFile.h" | ||||||
|  | #include "UriListParser.h" | ||||||
| #ifdef ENABLE_SSL | #ifdef ENABLE_SSL | ||||||
| # include "TLSContext.h" | # include "TLSContext.h" | ||||||
| #endif // ENABLE_SSL
 | #endif // ENABLE_SSL
 | ||||||
|  | @ -143,11 +144,13 @@ MultiUrlRequestInfo::MultiUrlRequestInfo | ||||||
| (const std::vector<SharedHandle<RequestGroup> >& requestGroups, | (const std::vector<SharedHandle<RequestGroup> >& requestGroups, | ||||||
|  const SharedHandle<Option>& op, |  const SharedHandle<Option>& op, | ||||||
|  const SharedHandle<StatCalc>& statCalc, |  const SharedHandle<StatCalc>& statCalc, | ||||||
|  const SharedHandle<OutputFile>& summaryOut) |  const SharedHandle<OutputFile>& summaryOut, | ||||||
|  |  const SharedHandle<UriListParser>& uriListParser) | ||||||
|   : requestGroups_(requestGroups), |   : requestGroups_(requestGroups), | ||||||
|     option_(op), |     option_(op), | ||||||
|     statCalc_(statCalc), |     statCalc_(statCalc), | ||||||
|     summaryOut_(summaryOut) |     summaryOut_(summaryOut), | ||||||
|  |     uriListParser_(uriListParser) | ||||||
| {} | {} | ||||||
| 
 | 
 | ||||||
| MultiUrlRequestInfo::~MultiUrlRequestInfo() {} | MultiUrlRequestInfo::~MultiUrlRequestInfo() {} | ||||||
|  | @ -235,6 +238,9 @@ error_code::Value MultiUrlRequestInfo::execute() | ||||||
|         (option_->getAsInt(PREF_SERVER_STAT_TIMEOUT)); |         (option_->getAsInt(PREF_SERVER_STAT_TIMEOUT)); | ||||||
|     } |     } | ||||||
|     e->setStatCalc(statCalc_); |     e->setStatCalc(statCalc_); | ||||||
|  |     if(uriListParser_) { | ||||||
|  |       e->getRequestGroupMan()->setUriListParser(uriListParser_); | ||||||
|  |     } | ||||||
| #ifdef SIGHUP | #ifdef SIGHUP | ||||||
|     util::setGlobalSignalHandler(SIGHUP, handler, 0); |     util::setGlobalSignalHandler(SIGHUP, handler, 0); | ||||||
| #endif // SIGHUP
 | #endif // SIGHUP
 | ||||||
|  |  | ||||||
|  | @ -48,6 +48,7 @@ class RequestGroup; | ||||||
| class Option; | class Option; | ||||||
| class StatCalc; | class StatCalc; | ||||||
| class OutputFile; | class OutputFile; | ||||||
|  | class UriListParser; | ||||||
| 
 | 
 | ||||||
| class MultiUrlRequestInfo { | class MultiUrlRequestInfo { | ||||||
| private: | private: | ||||||
|  | @ -59,13 +60,16 @@ private: | ||||||
| 
 | 
 | ||||||
|   SharedHandle<OutputFile> summaryOut_; |   SharedHandle<OutputFile> summaryOut_; | ||||||
| 
 | 
 | ||||||
|  |   SharedHandle<UriListParser> uriListParser_; | ||||||
|  | 
 | ||||||
|   void printMessageForContinue(); |   void printMessageForContinue(); | ||||||
| public: | public: | ||||||
|   MultiUrlRequestInfo |   MultiUrlRequestInfo | ||||||
|   (const std::vector<SharedHandle<RequestGroup> >& requestGroups, |   (const std::vector<SharedHandle<RequestGroup> >& requestGroups, | ||||||
|    const SharedHandle<Option>& op, |    const SharedHandle<Option>& op, | ||||||
|    const SharedHandle<StatCalc>& statCalc, |    const SharedHandle<StatCalc>& statCalc, | ||||||
|    const SharedHandle<OutputFile>& summaryOut); |    const SharedHandle<OutputFile>& summaryOut, | ||||||
|  |    const SharedHandle<UriListParser>& uriListParser); | ||||||
|    |    | ||||||
|   virtual ~MultiUrlRequestInfo(); |   virtual ~MultiUrlRequestInfo(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -201,6 +201,15 @@ OptionHandlerFactory::createOptionHandlers() | ||||||
|     op->addTag(TAG_ADVANCED); |     op->addTag(TAG_ADVANCED); | ||||||
|     handlers.push_back(op); |     handlers.push_back(op); | ||||||
|   } |   } | ||||||
|  |   { | ||||||
|  |     SharedHandle<OptionHandler> op(new BooleanOptionHandler | ||||||
|  |                                    (PREF_DEFERRED_INPUT, | ||||||
|  |                                     TEXT_DEFERRED_INPUT, | ||||||
|  |                                     A2_V_FALSE, | ||||||
|  |                                     OptionHandler::OPT_ARG)); | ||||||
|  |     op->addTag(TAG_ADVANCED); | ||||||
|  |     handlers.push_back(op); | ||||||
|  |   } | ||||||
|   { |   { | ||||||
|     SharedHandle<OptionHandler> op(new DefaultOptionHandler |     SharedHandle<OptionHandler> op(new DefaultOptionHandler | ||||||
|                                    (PREF_DIR, |                                    (PREF_DIR, | ||||||
|  |  | ||||||
|  | @ -74,6 +74,8 @@ | ||||||
| #include "Triplet.h" | #include "Triplet.h" | ||||||
| #include "Signature.h" | #include "Signature.h" | ||||||
| #include "OutputFile.h" | #include "OutputFile.h" | ||||||
|  | #include "download_helper.h" | ||||||
|  | #include "UriListParser.h" | ||||||
| 
 | 
 | ||||||
| namespace aria2 { | namespace aria2 { | ||||||
| 
 | 
 | ||||||
|  | @ -485,7 +487,21 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e) | ||||||
|   std::vector<SharedHandle<RequestGroup> > temp; |   std::vector<SharedHandle<RequestGroup> > temp; | ||||||
|   int count = 0; |   int count = 0; | ||||||
|   int num = maxSimultaneousDownloads_-requestGroups_.size(); |   int num = maxSimultaneousDownloads_-requestGroups_.size(); | ||||||
|   while(count < num && !reservedGroups_.empty()) { |   while(count < num && (uriListParser_ || !reservedGroups_.empty())) { | ||||||
|  |     if(uriListParser_ && reservedGroups_.empty()) { | ||||||
|  |       std::vector<SharedHandle<RequestGroup> > groups; | ||||||
|  |       bool ok = createRequestGroupFromUriListParser(groups, option_, | ||||||
|  |                                                     uriListParser_.get()); | ||||||
|  |       if(ok) { | ||||||
|  |         reservedGroups_.insert(reservedGroups_.end(), groups.begin(), | ||||||
|  |                                groups.end()); | ||||||
|  |       } else { | ||||||
|  |         uriListParser_.reset(); | ||||||
|  |         if(reservedGroups_.empty()) { | ||||||
|  |           break; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     SharedHandle<RequestGroup> groupToAdd = reservedGroups_.front(); |     SharedHandle<RequestGroup> groupToAdd = reservedGroups_.front(); | ||||||
|     reservedGroups_.pop_front(); |     reservedGroups_.pop_front(); | ||||||
|     std::vector<Command*> commands; |     std::vector<Command*> commands; | ||||||
|  | @ -962,4 +978,10 @@ void RequestGroupMan::getUsedHosts | ||||||
|                  std::back_inserter(usedHosts), Tuple2Pair<1, 3>()); |                  std::back_inserter(usedHosts), Tuple2Pair<1, 3>()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void RequestGroupMan::setUriListParser | ||||||
|  | (const SharedHandle<UriListParser>& uriListParser) | ||||||
|  | { | ||||||
|  |   uriListParser_ = uriListParser; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } // namespace aria2
 | } // namespace aria2
 | ||||||
|  |  | ||||||
|  | @ -55,6 +55,7 @@ class ServerStatMan; | ||||||
| class ServerStat; | class ServerStat; | ||||||
| class Option; | class Option; | ||||||
| class OutputFile; | class OutputFile; | ||||||
|  | class UriListParser; | ||||||
| 
 | 
 | ||||||
| class RequestGroupMan { | class RequestGroupMan { | ||||||
| private: | private: | ||||||
|  | @ -85,6 +86,9 @@ private: | ||||||
| 
 | 
 | ||||||
|   int maxDownloadResult_; |   int maxDownloadResult_; | ||||||
| 
 | 
 | ||||||
|  |   // UriListParser for deferred input.
 | ||||||
|  |   SharedHandle<UriListParser> uriListParser_; | ||||||
|  | 
 | ||||||
|   void formatDownloadResultFull |   void formatDownloadResultFull | ||||||
|   (OutputFile& out, |   (OutputFile& out, | ||||||
|    const std::string& status, |    const std::string& status, | ||||||
|  | @ -309,6 +313,8 @@ public: | ||||||
|   { |   { | ||||||
|     maxDownloadResult_ = v; |     maxDownloadResult_ = v; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   void setUriListParser(const SharedHandle<UriListParser>& uriListParser); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef SharedHandle<RequestGroupMan> RequestGroupManHandle; | typedef SharedHandle<RequestGroupMan> RequestGroupManHandle; | ||||||
|  |  | ||||||
|  | @ -412,21 +412,23 @@ void createRequestGroupForUri | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| namespace { | bool createRequestGroupFromUriListParser | ||||||
| void createRequestGroupForUriList |  | ||||||
| (std::vector<SharedHandle<RequestGroup> >& result, | (std::vector<SharedHandle<RequestGroup> >& result, | ||||||
|  const SharedHandle<Option>& option, |  const Option* option, | ||||||
|  const std::string& filename) |  UriListParser* uriListParser) | ||||||
| { | { | ||||||
|   UriListParser p(filename); |   // Since result already contains some entries, we cache the size of
 | ||||||
|   while(p.hasNext()) { |   // it. Later, we use this value to determine RequestGroup is
 | ||||||
|  |   // actually created.
 | ||||||
|  |   size_t num = result.size(); | ||||||
|  |   while(uriListParser->hasNext()) { | ||||||
|     std::vector<std::string> uris; |     std::vector<std::string> uris; | ||||||
|     Option tempOption; |     Option tempOption; | ||||||
|     p.parseNext(uris, tempOption); |     uriListParser->parseNext(uris, tempOption); | ||||||
|     if(uris.empty()) { |     if(uris.empty()) { | ||||||
|       continue; |       continue; | ||||||
|     } |     } | ||||||
|     SharedHandle<Option> requestOption(new Option(*option.get())); |     SharedHandle<Option> requestOption(new Option(*option)); | ||||||
|     requestOption->remove(PREF_OUT); |     requestOption->remove(PREF_OUT); | ||||||
|     const SharedHandle<OptionParser>& oparser = OptionParser::getInstance(); |     const SharedHandle<OptionParser>& oparser = OptionParser::getInstance(); | ||||||
|     for(size_t i = 1, len = option::countOption(); i < len; ++i) { |     for(size_t i = 1, len = option::countOption(); i < len; ++i) { | ||||||
|  | @ -436,25 +438,38 @@ void createRequestGroupForUriList | ||||||
|         requestOption->put(pref, tempOption.get(pref)); |         requestOption->put(pref, tempOption.get(pref)); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     // This does not throw exception because throwOnError = false.
 | ||||||
|     createRequestGroupForUri(result, requestOption, uris); |     createRequestGroupForUri(result, requestOption, uris); | ||||||
|  |     if(num < result.size()) { | ||||||
|  |       return true; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SharedHandle<UriListParser> openUriListParser(const std::string& filename) | ||||||
|  | { | ||||||
|  |   std::string listPath; | ||||||
|  |   if(filename == "-") { | ||||||
|  |     listPath = DEV_STDIN; | ||||||
|  |   } else { | ||||||
|  |     if(!File(filename).isFile()) { | ||||||
|  |       throw DL_ABORT_EX | ||||||
|  |         (fmt(EX_FILE_OPEN, filename.c_str(), "No such file")); | ||||||
|  |     } | ||||||
|  |     listPath = filename; | ||||||
|  |   } | ||||||
|  |   return SharedHandle<UriListParser>(new UriListParser(listPath)); | ||||||
| } | } | ||||||
| } // namespace
 |  | ||||||
| 
 | 
 | ||||||
| void createRequestGroupForUriList | void createRequestGroupForUriList | ||||||
| (std::vector<SharedHandle<RequestGroup> >& result, | (std::vector<SharedHandle<RequestGroup> >& result, | ||||||
|  const SharedHandle<Option>& option) |  const SharedHandle<Option>& option) | ||||||
| { | { | ||||||
|   if(option->get(PREF_INPUT_FILE) == "-") { |   SharedHandle<UriListParser> uriListParser = openUriListParser | ||||||
|     createRequestGroupForUriList(result, option, DEV_STDIN); |     (option->get(PREF_INPUT_FILE)); | ||||||
|   } else { |   while(createRequestGroupFromUriListParser(result, option.get(), | ||||||
|     if(!File(option->get(PREF_INPUT_FILE)).isFile()) { |                                             uriListParser.get())); | ||||||
|       throw DL_ABORT_EX |  | ||||||
|         (fmt(EX_FILE_OPEN, option->get(PREF_INPUT_FILE).c_str(), |  | ||||||
|              "No such file")); |  | ||||||
|     } |  | ||||||
|     createRequestGroupForUriList(result, option, option->get(PREF_INPUT_FILE)); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| SharedHandle<MetadataInfo> | SharedHandle<MetadataInfo> | ||||||
|  |  | ||||||
|  | @ -49,6 +49,7 @@ class RequestGroup; | ||||||
| class Option; | class Option; | ||||||
| class MetadataInfo; | class MetadataInfo; | ||||||
| class DownloadContext; | class DownloadContext; | ||||||
|  | class UriListParser; | ||||||
| 
 | 
 | ||||||
| #ifdef ENABLE_BITTORRENT | #ifdef ENABLE_BITTORRENT | ||||||
| // Create RequestGroup object using torrent file specified by
 | // Create RequestGroup object using torrent file specified by
 | ||||||
|  | @ -75,6 +76,26 @@ void createRequestGroupForMetalink | ||||||
|  const std::string& metalinkData = ""); |  const std::string& metalinkData = ""); | ||||||
| #endif // ENABLE_METALINK
 | #endif // ENABLE_METALINK
 | ||||||
| 
 | 
 | ||||||
|  | // Reads one entry from uriListParser and creates RequestGroups from
 | ||||||
|  | // it and store them in result. If the bad entry is found, this
 | ||||||
|  | // function just skips it and reads next entry. If at least one
 | ||||||
|  | // RequestGroup is created successfully, this function returns true
 | ||||||
|  | // and created RequestGroups are stored in result. If no RequestGroup
 | ||||||
|  | // is created and uriListParser reads all input, this function returns
 | ||||||
|  | // false. The option is used as a option template.
 | ||||||
|  | bool createRequestGroupFromUriListParser | ||||||
|  | (std::vector<SharedHandle<RequestGroup> >& result, | ||||||
|  |  const Option* option, | ||||||
|  |  UriListParser* uriListParser); | ||||||
|  | 
 | ||||||
|  | // Creates UriListParser using given filename.  If filename is "-",
 | ||||||
|  | // then UriListParser is configured to read from standard input.
 | ||||||
|  | // Otherwise, this function first checks file denoted by filename
 | ||||||
|  | // exists.  If it does not exist, this function throws exception.
 | ||||||
|  | // This function returns SharedHandle<UriListParser> object if it
 | ||||||
|  | // succeeds.
 | ||||||
|  | SharedHandle<UriListParser> openUriListParser(const std::string& filename); | ||||||
|  | 
 | ||||||
| // Create RequestGroup objects from reading file specified by input-file option.
 | // Create RequestGroup objects from reading file specified by input-file option.
 | ||||||
| // If the value of input-file option is "-", stdin is used as a input source.
 | // If the value of input-file option is "-", stdin is used as a input source.
 | ||||||
| // Each line is treated as if it is provided in command-line argument.
 | // Each line is treated as if it is provided in command-line argument.
 | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								src/main.cc
								
								
								
								
							
							
						
						
									
										14
									
								
								src/main.cc
								
								
								
								
							|  | @ -70,6 +70,7 @@ | ||||||
| #include "fmt.h" | #include "fmt.h" | ||||||
| #include "NullOutputFile.h" | #include "NullOutputFile.h" | ||||||
| #include "console.h" | #include "console.h" | ||||||
|  | #include "UriListParser.h" | ||||||
| #ifdef ENABLE_BITTORRENT | #ifdef ENABLE_BITTORRENT | ||||||
| # include "bittorrent_helper.h" | # include "bittorrent_helper.h" | ||||||
| #endif // ENABLE_BITTORRENT
 | #endif // ENABLE_BITTORRENT
 | ||||||
|  | @ -225,6 +226,7 @@ error_code::Value main(int argc, char* argv[]) | ||||||
|   util::setGlobalSignalHandler(SIGCHLD, SIG_IGN, 0); |   util::setGlobalSignalHandler(SIGCHLD, SIG_IGN, 0); | ||||||
| #endif // SIGCHILD
 | #endif // SIGCHILD
 | ||||||
|   std::vector<SharedHandle<RequestGroup> > requestGroups; |   std::vector<SharedHandle<RequestGroup> > requestGroups; | ||||||
|  |   SharedHandle<UriListParser> uriListParser; | ||||||
| #ifdef ENABLE_BITTORRENT | #ifdef ENABLE_BITTORRENT | ||||||
|   if(!op->blank(PREF_TORRENT_FILE)) { |   if(!op->blank(PREF_TORRENT_FILE)) { | ||||||
|     if(op->get(PREF_SHOW_FILES) == A2_V_TRUE) { |     if(op->get(PREF_SHOW_FILES) == A2_V_TRUE) { | ||||||
|  | @ -248,7 +250,11 @@ error_code::Value main(int argc, char* argv[]) | ||||||
|     else |     else | ||||||
| #endif // ENABLE_METALINK
 | #endif // ENABLE_METALINK
 | ||||||
|       if(!op->blank(PREF_INPUT_FILE)) { |       if(!op->blank(PREF_INPUT_FILE)) { | ||||||
|         createRequestGroupForUriList(requestGroups, op); |         if(op->getAsBool(PREF_DEFERRED_INPUT)) { | ||||||
|  |           uriListParser = openUriListParser(op->get(PREF_INPUT_FILE)); | ||||||
|  |         } else { | ||||||
|  |           createRequestGroupForUriList(requestGroups, op); | ||||||
|  |         } | ||||||
| #if defined ENABLE_BITTORRENT || defined ENABLE_METALINK | #if defined ENABLE_BITTORRENT || defined ENABLE_METALINK | ||||||
|       } else if(op->get(PREF_SHOW_FILES) == A2_V_TRUE) { |       } else if(op->get(PREF_SHOW_FILES) == A2_V_TRUE) { | ||||||
|         showFiles(args, op); |         showFiles(args, op); | ||||||
|  | @ -269,11 +275,13 @@ error_code::Value main(int argc, char* argv[]) | ||||||
|   op->remove(PREF_SELECT_FILE); |   op->remove(PREF_SELECT_FILE); | ||||||
|   op->remove(PREF_PAUSE); |   op->remove(PREF_PAUSE); | ||||||
|   op->remove(PREF_CHECKSUM); |   op->remove(PREF_CHECKSUM); | ||||||
|   if(!op->getAsBool(PREF_ENABLE_RPC) && requestGroups.empty()) { |   if(!op->getAsBool(PREF_ENABLE_RPC) && requestGroups.empty() && | ||||||
|  |      !uriListParser) { | ||||||
|     global::cout()->printf("%s\n", MSG_NO_FILES_TO_DOWNLOAD); |     global::cout()->printf("%s\n", MSG_NO_FILES_TO_DOWNLOAD); | ||||||
|   } else { |   } else { | ||||||
|     exitStatus = MultiUrlRequestInfo(requestGroups, op, getStatCalc(op), |     exitStatus = MultiUrlRequestInfo(requestGroups, op, getStatCalc(op), | ||||||
|                                      getSummaryOut(op)).execute(); |                                      getSummaryOut(op), | ||||||
|  |                                      uriListParser).execute(); | ||||||
|   } |   } | ||||||
|   return exitStatus; |   return exitStatus; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -213,6 +213,8 @@ const Pref* PREF_NO_NETRC = makePref("no-netrc"); | ||||||
| const Pref* PREF_MAX_DOWNLOADS = makePref("max-downloads"); | const Pref* PREF_MAX_DOWNLOADS = makePref("max-downloads"); | ||||||
| // value: string that your file system recognizes as a file name.
 | // value: string that your file system recognizes as a file name.
 | ||||||
| const Pref* PREF_INPUT_FILE = makePref("input-file"); | const Pref* PREF_INPUT_FILE = makePref("input-file"); | ||||||
|  | // value: true | false
 | ||||||
|  | const Pref* PREF_DEFERRED_INPUT = makePref("deferred-input"); | ||||||
| // value: 1*digit
 | // value: 1*digit
 | ||||||
| const Pref* PREF_MAX_CONCURRENT_DOWNLOADS = makePref("max-concurrent-downloads"); | const Pref* PREF_MAX_CONCURRENT_DOWNLOADS = makePref("max-concurrent-downloads"); | ||||||
| // value: true | false
 | // value: true | false
 | ||||||
|  |  | ||||||
|  | @ -156,6 +156,8 @@ extern const Pref* PREF_MAX_OVERALL_DOWNLOAD_LIMIT; | ||||||
| extern const Pref* PREF_MAX_DOWNLOADS; | extern const Pref* PREF_MAX_DOWNLOADS; | ||||||
| // value: string that your file system recognizes as a file name.
 | // value: string that your file system recognizes as a file name.
 | ||||||
| extern const Pref* PREF_INPUT_FILE; | extern const Pref* PREF_INPUT_FILE; | ||||||
|  | // value: true | false
 | ||||||
|  | extern const Pref* PREF_DEFERRED_INPUT; | ||||||
| // value: 1*digit
 | // value: 1*digit
 | ||||||
| extern const Pref* PREF_MAX_CONCURRENT_DOWNLOADS; | extern const Pref* PREF_MAX_CONCURRENT_DOWNLOADS; | ||||||
| // value: true | false
 | // value: true | false
 | ||||||
|  |  | ||||||
|  | @ -226,7 +226,7 @@ | ||||||
|     "                              line of URI. This optional line must start with\n" \ |     "                              line of URI. This optional line must start with\n" \ | ||||||
|     "                              one or more white spaces and have one option per\n" \ |     "                              one or more white spaces and have one option per\n" \ | ||||||
|     "                              single line. See INPUT FILE section of man page\n" \ |     "                              single line. See INPUT FILE section of man page\n" \ | ||||||
|     "                              for details.") |     "                              for details. See also --deferred-input option.") | ||||||
| #define TEXT_MAX_CONCURRENT_DOWNLOADS                                   \ | #define TEXT_MAX_CONCURRENT_DOWNLOADS                                   \ | ||||||
|   _(" -j, --max-concurrent-downloads=N Set maximum number of parallel downloads for\n" \ |   _(" -j, --max-concurrent-downloads=N Set maximum number of parallel downloads for\n" \ | ||||||
|     "                              every static (HTTP/FTP) URL, torrent and metalink.\n" \ |     "                              every static (HTTP/FTP) URL, torrent and metalink.\n" \ | ||||||
|  | @ -859,3 +859,11 @@ | ||||||
|     "                              with its own pid and when parent process exits\n" \ |     "                              with its own pid and when parent process exits\n" \ | ||||||
|     "                              for some reason, aria2 can detect it and shutdown\n" \ |     "                              for some reason, aria2 can detect it and shutdown\n" \ | ||||||
|     "                              itself.") |     "                              itself.") | ||||||
|  | #define TEXT_DEFERRED_INPUT                     \ | ||||||
|  |   _(" --deferred-input[=true|false] If true is given, aria2 does not read all URIs\n" \ | ||||||
|  |     "                              and options from file specified by -i option at\n" \ | ||||||
|  |     "                              startup, but it reads one by one when it needs\n" \ | ||||||
|  |     "                              later. This may reduce memory usage if input\n" \ | ||||||
|  |     "                              file contains a lot of URIs to download.\n" \ | ||||||
|  |     "                              If false is given, aria2 reads all URIs and\n" \ | ||||||
|  |     "                              options at startup.") | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Tatsuhiro Tsujikawa
						Tatsuhiro Tsujikawa