summaryrefslogtreecommitdiff
path: root/src/aria2api.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-02 09:40:27 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-02 09:40:27 +0900
commite5cccd335cc99f28615d44d5cb0b4400239c63cd (patch)
tree03bb0f029fb5c0eeb0729cb2e2384a98d280fc45 /src/aria2api.cc
parent24a6896bf44dcda62c9bbf0b41eb61b178ba6954 (diff)
Add addMetalink API function
Diffstat (limited to 'src/aria2api.cc')
-rw-r--r--src/aria2api.cc37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/aria2api.cc b/src/aria2api.cc
index 72352266..02171b7a 100644
--- a/src/aria2api.cc
+++ b/src/aria2api.cc
@@ -227,6 +227,43 @@ int addUri(Session* session,
return 0;
}
+int addMetalink(Session* session,
+ std::vector<A2Gid>& gids,
+ const std::string& metalinkFile,
+ const KeyVals& options,
+ int position)
+{
+#ifdef ENABLE_METALINK
+ const SharedHandle<DownloadEngine>& e =
+ session->context->reqinfo->getDownloadEngine();
+ SharedHandle<Option> requestOption(new Option(*e->getOption()));
+ std::vector<SharedHandle<RequestGroup> > result;
+ try {
+ apiGatherRequestOption(requestOption.get(), options,
+ OptionParser::getInstance());
+ requestOption->put(PREF_METALINK_FILE, metalinkFile);
+ createRequestGroupForMetalink(result, requestOption);
+ } catch(RecoverableException& e) {
+ A2_LOG_INFO_EX(EX_EXCEPTION_CAUGHT, e);
+ return -1;
+ }
+ if(!result.empty()) {
+ if(position >= 0) {
+ e->getRequestGroupMan()->insertReservedGroup(position, result);
+ } else {
+ e->getRequestGroupMan()->addReservedGroup(result);
+ }
+ for(std::vector<SharedHandle<RequestGroup> >::const_iterator i =
+ result.begin(), eoi = result.end(); i != eoi; ++i) {
+ gids.push_back((*i)->getGID());
+ }
+ }
+ return 0;
+#else // !ENABLE_METALINK
+ return -1;
+#endif // !ENABLE_METALINK
+}
+
int removeDownload(Session* session, const A2Gid& gid, bool force)
{
const SharedHandle<DownloadEngine>& e =