diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-01 16:58:34 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-01 16:58:34 +0900 |
| commit | bbc8866cfb28c1ca867672f963b23803a65877f1 (patch) | |
| tree | 5b74bcec51f3e39a0ee1deda174b571702bb8848 | |
| parent | 4c50544f1aff35ffbe467e6aaf74c9f57ec73a57 (diff) | |
Add removeDownload, pauseDownload and unpauseDownload API function
| -rw-r--r-- | src/RpcMethodImpl.cc | 50 | ||||
| -rw-r--r-- | src/RpcMethodImpl.h | 3 | ||||
| -rw-r--r-- | src/aria2api.cc | 58 | ||||
| -rw-r--r-- | src/includes/aria2/aria2.h | 6 |
4 files changed, 91 insertions, 26 deletions
diff --git a/src/RpcMethodImpl.cc b/src/RpcMethodImpl.cc index 56b5bbcf..fa6d5a3b 100644 --- a/src/RpcMethodImpl.cc +++ b/src/RpcMethodImpl.cc @@ -422,32 +422,6 @@ SharedHandle<ValueBase> ForceRemoveRpcMethod::process } namespace { -bool pauseRequestGroup -(const SharedHandle<RequestGroup>& group, bool reserved, bool forcePause) -{ - if((reserved && !group->isPauseRequested()) || - (!reserved && - !group->isForceHaltRequested() && - ((forcePause && group->isHaltRequested() && group->isPauseRequested()) || - (!group->isHaltRequested() && !group->isPauseRequested())))) { - if(!reserved) { - // Call setHaltRequested before setPauseRequested because - // setHaltRequested calls setPauseRequested(false) internally. - if(forcePause) { - group->setForceHaltRequested(true, RequestGroup::NONE); - } else { - group->setHaltRequested(true, RequestGroup::NONE); - } - } - group->setPauseRequested(true); - return true; - } else { - return false; - } -} -} // namespace - -namespace { SharedHandle<ValueBase> pauseDownload (const RpcRequest& req, DownloadEngine* e, bool forcePause) { @@ -1546,4 +1520,28 @@ SharedHandle<ValueBase> NoSuchMethodRpcMethod::process } // namespace rpc +bool pauseRequestGroup +(const SharedHandle<RequestGroup>& group, bool reserved, bool forcePause) +{ + if((reserved && !group->isPauseRequested()) || + (!reserved && + !group->isForceHaltRequested() && + ((forcePause && group->isHaltRequested() && group->isPauseRequested()) || + (!group->isHaltRequested() && !group->isPauseRequested())))) { + if(!reserved) { + // Call setHaltRequested before setPauseRequested because + // setHaltRequested calls setPauseRequested(false) internally. + if(forcePause) { + group->setForceHaltRequested(true, RequestGroup::NONE); + } else { + group->setHaltRequested(true, RequestGroup::NONE); + } + } + group->setPauseRequested(true); + return true; + } else { + return false; + } +} + } // namespace aria2 diff --git a/src/RpcMethodImpl.h b/src/RpcMethodImpl.h index 00d64193..90e439c4 100644 --- a/src/RpcMethodImpl.h +++ b/src/RpcMethodImpl.h @@ -605,6 +605,9 @@ void gatherBitTorrentMetadata } // namespace rpc +bool pauseRequestGroup +(const SharedHandle<RequestGroup>& group, bool reserved, bool forcePause); + } // namespace aria2 #endif // D_RPC_METHOD_IMPL_H diff --git a/src/aria2api.cc b/src/aria2api.cc index 4dabd453..9f46e957 100644 --- a/src/aria2api.cc +++ b/src/aria2api.cc @@ -55,6 +55,7 @@ #include "FileEntry.h" #include "BitfieldMan.h" #include "DownloadContext.h" +#include "RpcMethodImpl.h" namespace aria2 { @@ -207,6 +208,63 @@ int addUri(Session* session, return 0; } +int removeDownload(Session* session, const A2Gid& gid, bool force) +{ + const SharedHandle<DownloadEngine>& e = + session->context->reqinfo->getDownloadEngine(); + SharedHandle<RequestGroup> group = e->getRequestGroupMan()->findGroup(gid); + if(group) { + if(group->getState() == RequestGroup::STATE_ACTIVE) { + if(force) { + group->setForceHaltRequested(true, RequestGroup::USER_REQUEST); + } else { + group->setHaltRequested(true, RequestGroup::USER_REQUEST); + } + e->setRefreshInterval(0); + } else { + if(group->isDependencyResolved()) { + e->getRequestGroupMan()->removeReservedGroup(gid); + } else { + return -1; + } + } + } else { + return -1; + } + return 0; +} + +int pauseDownload(Session* session, const A2Gid& gid, bool force) +{ + const SharedHandle<DownloadEngine>& e = + session->context->reqinfo->getDownloadEngine(); + SharedHandle<RequestGroup> group = e->getRequestGroupMan()->findGroup(gid); + if(group) { + bool reserved = group->getState() == RequestGroup::STATE_WAITING; + if(pauseRequestGroup(group, reserved, force)) { + e->setRefreshInterval(0); + return 0; + } + } + return -1; +} + +int unpauseDownload(Session* session, const A2Gid& gid) +{ + const SharedHandle<DownloadEngine>& e = + session->context->reqinfo->getDownloadEngine(); + SharedHandle<RequestGroup> group = e->getRequestGroupMan()->findGroup(gid); + if(!group || + group->getState() != RequestGroup::STATE_WAITING || + !group->isPauseRequested()) { + return -1; + } else { + group->setPauseRequested(false); + e->getRequestGroupMan()->requestQueueCheck(); + } + return 0; +} + std::vector<A2Gid> getActiveDownload(Session* session) { const SharedHandle<DownloadEngine>& e = diff --git a/src/includes/aria2/aria2.h b/src/includes/aria2/aria2.h index 55efc8f6..e44bbe7e 100644 --- a/src/includes/aria2/aria2.h +++ b/src/includes/aria2/aria2.h @@ -134,6 +134,12 @@ int addUri(Session* session, // Returns the array of active download GID. std::vector<A2Gid> getActiveDownload(Session* session); +int removeDownload(Session* session, const A2Gid& gid, bool force = false); + +int pauseDownload(Session* session, const A2Gid& gid, bool force = false); + +int unpauseDownload(Session* session, const A2Gid& gid); + enum UriStatus { URI_USED, URI_WAITING |
