diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-02 09:40:27 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-02 09:40:27 +0900 |
| commit | e5cccd335cc99f28615d44d5cb0b4400239c63cd (patch) | |
| tree | 03bb0f029fb5c0eeb0729cb2e2384a98d280fc45 | |
| parent | 24a6896bf44dcda62c9bbf0b41eb61b178ba6954 (diff) | |
Add addMetalink API function
| -rw-r--r-- | src/aria2api.cc | 37 | ||||
| -rw-r--r-- | src/includes/aria2/aria2.h | 14 |
2 files changed, 51 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 = diff --git a/src/includes/aria2/aria2.h b/src/includes/aria2/aria2.h index 46415a4f..30284e55 100644 --- a/src/includes/aria2/aria2.h +++ b/src/includes/aria2/aria2.h @@ -138,6 +138,20 @@ int addUri(Session* session, const KeyVals& options, int position = -1); +// Adds Metalink download. The path to Metalink file is specified by +// the |metalinkFile|. On successful return, the GID of added +// download is appended to the |gids|. The |options| is a pair of +// option name and value. If the |position| is not negative integer, +// the new download is inserted at position in the waiting queue. If +// the |position| is negative or the |position| is larger than the +// size of the queue, it is appended at the end of the queue. This +// function returns 0 if it succeeds, or -1. +int addMetalink(Session* session, + std::vector<A2Gid>& gids, + const std::string& metalinkFile, + const KeyVals& options, + int position = -1); + // Returns the array of active download GID. std::vector<A2Gid> getActiveDownload(Session* session); |
