mirror of https://github.com/aria2/aria2
Add removeDownload, pauseDownload and unpauseDownload API function
parent
4c50544f1a
commit
bbc8866cfb
|
@ -421,32 +421,6 @@ SharedHandle<ValueBase> ForceRemoveRpcMethod::process
|
||||||
return removeDownload(req, e, true);
|
return removeDownload(req, e, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
namespace {
|
||||||
SharedHandle<ValueBase> pauseDownload
|
SharedHandle<ValueBase> pauseDownload
|
||||||
(const RpcRequest& req, DownloadEngine* e, bool forcePause)
|
(const RpcRequest& req, DownloadEngine* e, bool forcePause)
|
||||||
|
@ -1546,4 +1520,28 @@ SharedHandle<ValueBase> NoSuchMethodRpcMethod::process
|
||||||
|
|
||||||
} // namespace rpc
|
} // 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
|
} // namespace aria2
|
||||||
|
|
|
@ -605,6 +605,9 @@ void gatherBitTorrentMetadata
|
||||||
|
|
||||||
} // namespace rpc
|
} // namespace rpc
|
||||||
|
|
||||||
|
bool pauseRequestGroup
|
||||||
|
(const SharedHandle<RequestGroup>& group, bool reserved, bool forcePause);
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
||||||
#endif // D_RPC_METHOD_IMPL_H
|
#endif // D_RPC_METHOD_IMPL_H
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
#include "FileEntry.h"
|
#include "FileEntry.h"
|
||||||
#include "BitfieldMan.h"
|
#include "BitfieldMan.h"
|
||||||
#include "DownloadContext.h"
|
#include "DownloadContext.h"
|
||||||
|
#include "RpcMethodImpl.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -207,6 +208,63 @@ int addUri(Session* session,
|
||||||
return 0;
|
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)
|
std::vector<A2Gid> getActiveDownload(Session* session)
|
||||||
{
|
{
|
||||||
const SharedHandle<DownloadEngine>& e =
|
const SharedHandle<DownloadEngine>& e =
|
||||||
|
|
|
@ -134,6 +134,12 @@ int addUri(Session* session,
|
||||||
// Returns the array of active download GID.
|
// Returns the array of active download GID.
|
||||||
std::vector<A2Gid> getActiveDownload(Session* session);
|
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 {
|
enum UriStatus {
|
||||||
URI_USED,
|
URI_USED,
|
||||||
URI_WAITING
|
URI_WAITING
|
||||||
|
|
Loading…
Reference in New Issue