summaryrefslogtreecommitdiff
path: root/src/aria2api.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-17 22:56:21 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-17 22:56:21 +0900
commit06377d77c9a7bf2237f1bfcd5bf79e209b0e2247 (patch)
tree3e1b62169574749f50039c4a75450da9c0cb421e /src/aria2api.cc
parent13e064e4e16aeae9479e1002c3e3fa1ba2cf303c (diff)
Add changeGlobalOption, getGlobalOption, getGlobalOptions API
Diffstat (limited to 'src/aria2api.cc')
-rw-r--r--src/aria2api.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/aria2api.cc b/src/aria2api.cc
index 069bb12a..c7504941 100644
--- a/src/aria2api.cc
+++ b/src/aria2api.cc
@@ -247,6 +247,17 @@ void apiGatherChangeableOptionForReserved
} // namespace
namespace {
+void apiGatherChangeableGlobalOption
+(Option* option, const KeyVals& options,
+ const SharedHandle<OptionParser>& optionParser)
+{
+ apiGatherOption(options.begin(), options.end(),
+ std::mem_fun(&OptionHandler::getChangeGlobalOption),
+ option, optionParser);
+}
+} // namespace
+
+namespace {
void addRequestGroup(const SharedHandle<RequestGroup>& group,
const SharedHandle<DownloadEngine>& e,
int position)
@@ -466,6 +477,45 @@ int changeOption(Session* session, const A2Gid& gid, const KeyVals& options)
}
}
+const std::string& getGlobalOption(Session* session, const std::string& name)
+{
+ const SharedHandle<DownloadEngine>& e =
+ session->context->reqinfo->getDownloadEngine();
+ return e->getOption()->get(option::k2p(name));
+}
+
+KeyVals getGlobalOptions(Session* session)
+{
+ const SharedHandle<DownloadEngine>& e =
+ session->context->reqinfo->getDownloadEngine();
+ const SharedHandle<OptionParser>& optionParser = OptionParser::getInstance();
+ const Option* option = e->getOption();
+ KeyVals options;
+ for(size_t i = 1, len = option::countOption(); i < len; ++i) {
+ const Pref* pref = option::i2p(i);
+ if(option->defined(pref) && optionParser->find(pref)) {
+ options.push_back(KeyVals::value_type(pref->k, option->get(pref)));
+ }
+ }
+ return options;
+}
+
+int changeGlobalOption(Session* session, const KeyVals& options)
+{
+ const SharedHandle<DownloadEngine>& e =
+ session->context->reqinfo->getDownloadEngine();
+ Option option;
+ try {
+ apiGatherChangeableGlobalOption(&option, options,
+ OptionParser::getInstance());
+ } catch(RecoverableException& err) {
+ A2_LOG_INFO_EX(EX_EXCEPTION_CAUGHT, err);
+ return -1;
+ }
+ changeGlobalOption(option, e.get());
+ return 0;
+}
+
std::vector<A2Gid> getActiveDownload(Session* session)
{
const SharedHandle<DownloadEngine>& e =