From 9214e7250148135675db18c3d697f095454170c3 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 23 Nov 2016 22:30:39 +0900 Subject: Expand ${HOME} to user's home directory in several options The following options implement this substitution: * --ca-certificate * --certificate * --dht-file-path * --dht-file-path6 * --dir * --input-file * --load-cookies * --log * --metalink-file * --netrc-path * --on-bt-download-complete * --on-download-complete * --on-download-error * --on-download-start * --on-download-stop * --on-download_pause * --out * --private-key * --rpc-certificate * --rpc-private-key * --save-cookies * --save-session * --server-stat-if * --server-stat-of * --torrent-file --- src/OptionHandlerFactory.cc | 127 ++++++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 57 deletions(-) (limited to 'src/OptionHandlerFactory.cc') diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index 99b6ca35..fd963613 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -200,9 +200,10 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_DIR, TEXT_DIR, File::getCurrentDir(), - PATH_TO_DIR, OptionHandler::REQ_ARG, 'd')); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_DIR, TEXT_DIR, File::getCurrentDir(), /* acceptStdin = */ false, + 'd', + /* mustExist = */ false, PATH_TO_DIR)); op->addTag(TAG_BASIC); op->addTag(TAG_FILE); op->setInitialOption(true); @@ -390,9 +391,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( - PREF_INPUT_FILE, TEXT_INPUT_FILE, NO_DEFAULT_VALUE, PATH_TO_FILE_STDIN, - OptionHandler::REQ_ARG, 'i')); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_INPUT_FILE, TEXT_INPUT_FILE, NO_DEFAULT_VALUE, + /* acceptStdin = */ true, 'i', /* mustExist = */ false)); op->addTag(TAG_BASIC); handlers.push_back(op); } @@ -413,9 +414,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( - PREF_LOG, TEXT_LOG, NO_DEFAULT_VALUE, PATH_TO_FILE_STDOUT, - OptionHandler::REQ_ARG, 'l')); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_LOG, TEXT_LOG, NO_DEFAULT_VALUE, /* acceptStdin = */ false, 'l', + /* mustExist = */ false, PATH_TO_FILE_STDOUT)); op->addTag(TAG_BASIC); op->setChangeGlobalOption(true); handlers.push_back(op); @@ -542,41 +543,46 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( + OptionHandler* op(new LocalFilePathOptionHandler( PREF_ON_DOWNLOAD_COMPLETE, TEXT_ON_DOWNLOAD_COMPLETE, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false, PATH_TO_COMMAND)); op->addTag(TAG_ADVANCED); op->addTag(TAG_HOOK); handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_ON_DOWNLOAD_ERROR, TEXT_ON_DOWNLOAD_ERROR, - NO_DEFAULT_VALUE, PATH_TO_COMMAND)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_ON_DOWNLOAD_ERROR, TEXT_ON_DOWNLOAD_ERROR, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false, + PATH_TO_COMMAND)); op->addTag(TAG_ADVANCED); op->addTag(TAG_HOOK); handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_ON_DOWNLOAD_PAUSE, TEXT_ON_DOWNLOAD_PAUSE, - NO_DEFAULT_VALUE, PATH_TO_COMMAND)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_ON_DOWNLOAD_PAUSE, TEXT_ON_DOWNLOAD_PAUSE, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false, + PATH_TO_COMMAND)); op->addTag(TAG_ADVANCED); op->addTag(TAG_HOOK); handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_ON_DOWNLOAD_START, TEXT_ON_DOWNLOAD_START, - NO_DEFAULT_VALUE, PATH_TO_COMMAND)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_ON_DOWNLOAD_START, TEXT_ON_DOWNLOAD_START, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false, + PATH_TO_COMMAND)); op->addTag(TAG_ADVANCED); op->addTag(TAG_HOOK); handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_ON_DOWNLOAD_STOP, TEXT_ON_DOWNLOAD_STOP, - NO_DEFAULT_VALUE, PATH_TO_COMMAND)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_ON_DOWNLOAD_STOP, TEXT_ON_DOWNLOAD_STOP, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false, + PATH_TO_COMMAND)); op->addTag(TAG_ADVANCED); op->addTag(TAG_HOOK); handlers.push_back(op); @@ -645,8 +651,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( - PREF_SAVE_SESSION, TEXT_SAVE_SESSION, NO_DEFAULT_VALUE, PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_SAVE_SESSION, TEXT_SAVE_SESSION, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_ADVANCED); op->setChangeGlobalOption(true); handlers.push_back(op); @@ -741,8 +748,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() { OptionHandler* op( #ifdef HAVE_APPLETLS - new DefaultOptionHandler(PREF_RPC_CERTIFICATE, TEXT_RPC_CERTIFICATE, - NO_DEFAULT_VALUE) + new LocalFilePathOptionHandler( + PREF_RPC_CERTIFICATE, TEXT_RPC_CERTIFICATE, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false) #else // HAVE_APPLETLS new LocalFilePathOptionHandler( PREF_RPC_CERTIFICATE, TEXT_RPC_CERTIFICATE, NO_DEFAULT_VALUE, false) @@ -884,9 +892,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler(PREF_OUT, TEXT_OUT, - NO_DEFAULT_VALUE, PATH_TO_FILE, - OptionHandler::REQ_ARG, 'o')); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_OUT, TEXT_OUT, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 'o', /* mustExist = */ false)); op->addTag(TAG_BASIC); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); @@ -937,17 +945,17 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler(PREF_SERVER_STAT_IF, - TEXT_SERVER_STAT_IF, - NO_DEFAULT_VALUE, PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_SERVER_STAT_IF, TEXT_SERVER_STAT_IF, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler(PREF_SERVER_STAT_OF, - TEXT_SERVER_STAT_OF, - NO_DEFAULT_VALUE, PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_SERVER_STAT_OF, TEXT_SERVER_STAT_OF, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); op->setChangeGlobalOption(true); @@ -1012,14 +1020,14 @@ std::vector OptionHandlerFactory::createOptionHandlers() } // HTTP Specific Options { - OptionHandler* op(new DefaultOptionHandler(PREF_CA_CERTIFICATE, - TEXT_CA_CERTIFICATE, + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_CA_CERTIFICATE, TEXT_CA_CERTIFICATE, #ifdef CA_BUNDLE - CA_BUNDLE, + CA_BUNDLE, #else - "", + "", #endif - PATH_TO_FILE)); + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_HTTP); op->addTag(TAG_HTTPS); handlers.push_back(op); @@ -1128,8 +1136,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( - PREF_LOAD_COOKIES, TEXT_LOAD_COOKIES, NO_DEFAULT_VALUE, PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_LOAD_COOKIES, TEXT_LOAD_COOKIES, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_BASIC); op->addTag(TAG_HTTP); op->addTag(TAG_COOKIE); @@ -1151,8 +1160,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( - PREF_PRIVATE_KEY, TEXT_PRIVATE_KEY, NO_DEFAULT_VALUE, PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_PRIVATE_KEY, TEXT_PRIVATE_KEY, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_HTTP); op->addTag(TAG_HTTPS); handlers.push_back(op); @@ -1166,8 +1176,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( - PREF_SAVE_COOKIES, TEXT_SAVE_COOKIES, NO_DEFAULT_VALUE, PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_SAVE_COOKIES, TEXT_SAVE_COOKIES, NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_HTTP); op->addTag(TAG_COOKIE); op->setChangeGlobalOption(true); @@ -1252,9 +1263,9 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler(PREF_NETRC_PATH, TEXT_NETRC_PATH, - util::getHomeDir() + "/.netrc", - PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_NETRC_PATH, TEXT_NETRC_PATH, util::getHomeDir() + "/.netrc", + /* acceptStdin = */ false, 0, /* mustExist = */ false)); handlers.push_back(op); } // Proxy options @@ -1682,16 +1693,16 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_DHT_FILE_PATH, TEXT_DHT_FILE_PATH, - util::getDHTFile(false), PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_DHT_FILE_PATH, TEXT_DHT_FILE_PATH, util::getDHTFile(false), + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_BITTORRENT); handlers.push_back(op); } { - OptionHandler* op( - new DefaultOptionHandler(PREF_DHT_FILE_PATH6, TEXT_DHT_FILE_PATH6, - util::getDHTFile(true), PATH_TO_FILE)); + OptionHandler* op(new LocalFilePathOptionHandler( + PREF_DHT_FILE_PATH6, TEXT_DHT_FILE_PATH6, util::getDHTFile(true), + /* acceptStdin = */ false, 0, /* mustExist = */ false)); op->addTag(TAG_BITTORRENT); handlers.push_back(op); } @@ -1795,9 +1806,11 @@ std::vector OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - OptionHandler* op(new DefaultOptionHandler( + OptionHandler* op(new LocalFilePathOptionHandler( PREF_ON_BT_DOWNLOAD_COMPLETE, TEXT_ON_BT_DOWNLOAD_COMPLETE, - NO_DEFAULT_VALUE, PATH_TO_COMMAND)); + NO_DEFAULT_VALUE, + /* acceptStdin = */ false, 0, /* mustExist = */ false, + PATH_TO_COMMAND)); op->addTag(TAG_ADVANCED); op->addTag(TAG_HOOK); handlers.push_back(op); -- cgit