From 49b032800fa6f509b2bcbeab3e401d06e84a2c5a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 14 May 2011 22:46:04 +0900 Subject: [PATCH] Added --metalink-base-uri option. --metalink-uri option specifies base URI to resolve relative URI in metalink file stored in local disk. If URI points to a directory, URI must end with '/'. --- src/OptionHandlerFactory.cc | 8 ++++++++ src/download_helper.cc | 9 ++++++--- src/main.cc | 3 ++- src/prefs.cc | 1 + src/prefs.h | 2 ++ src/usage_text.h | 5 +++++ 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index 4e8d3ed3..f518adb5 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -1692,6 +1692,14 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() op->addTag(TAG_METALINK); handlers.push_back(op); } + { + SharedHandle op(new DefaultOptionHandler + (PREF_METALINK_BASE_URI, + TEXT_METALINK_BASE_URI, + NO_DEFAULT_VALUE)); + op->addTag(TAG_METALINK); + handlers.push_back(op); + } { SharedHandle op(new BooleanOptionHandler (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL, diff --git a/src/download_helper.cc b/src/download_helper.cc index 1ccf4464..b31bc992 100644 --- a/src/download_helper.cc +++ b/src/download_helper.cc @@ -352,11 +352,13 @@ void createRequestGroupForMetalink if(metalinkData.empty()) { Metalink2RequestGroup().generate(result, option->get(PREF_METALINK_FILE), - option); + option, + option->get(PREF_METALINK_BASE_URI)); } else { SharedHandle dw(new ByteArrayDiskWriter()); dw->setString(metalinkData); - Metalink2RequestGroup().generate(result, dw, option); + Metalink2RequestGroup().generate(result, dw, option, + option->get(PREF_METALINK_BASE_URI)); } } #endif // ENABLE_METALINK @@ -417,7 +419,8 @@ public: #ifdef ENABLE_METALINK else if(!ignoreLocalPath_ && detector_.guessMetalinkFile(uri)) { try { - Metalink2RequestGroup().generate(requestGroups_, uri, option_); + Metalink2RequestGroup().generate(requestGroups_, uri, option_, + option_->get(PREF_METALINK_BASE_URI)); } catch(RecoverableException& e) { if(throwOnError_) { throw; diff --git a/src/main.cc b/src/main.cc index fd621a2b..ce0657df 100644 --- a/src/main.cc +++ b/src/main.cc @@ -130,7 +130,8 @@ void showMetalinkFile (const std::string& uri, const SharedHandle