mirror of
https://github.com/aria2/aria2.git
synced 2025-01-08 11:01:38 +00:00
Add sessionConfigSetKeepRunning and shutdown API function
Setting sessionConfigSetKeepRunning to true makes aria2 core keep running even if there is no download to perform, just like --enable-rpc option.
This commit is contained in:
parent
a456d83de0
commit
24a6896bf4
@ -107,7 +107,7 @@ RequestGroupMan::RequestGroupMan
|
||||
(option->getAsInt(PREF_MAX_OVERALL_DOWNLOAD_LIMIT)),
|
||||
maxOverallUploadSpeedLimit_(option->getAsInt
|
||||
(PREF_MAX_OVERALL_UPLOAD_LIMIT)),
|
||||
rpc_(option->getAsBool(PREF_ENABLE_RPC)),
|
||||
keepRunning_(option->getAsBool(PREF_ENABLE_RPC)),
|
||||
queueCheck_(true),
|
||||
removedErrorResult_(0),
|
||||
removedLastErrorResult_(error_code::FINISHED),
|
||||
@ -125,7 +125,7 @@ RequestGroupMan::~RequestGroupMan()
|
||||
|
||||
bool RequestGroupMan::downloadFinished()
|
||||
{
|
||||
if(rpc_) {
|
||||
if(keepRunning_) {
|
||||
return false;
|
||||
}
|
||||
return requestGroups_.empty() && reservedGroups_.empty();
|
||||
@ -474,7 +474,7 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
|
||||
}
|
||||
SharedHandle<RequestGroup> groupToAdd = *reservedGroups_.begin();
|
||||
reservedGroups_.pop_front();
|
||||
if((rpc_ && groupToAdd->isPauseRequested()) ||
|
||||
if((keepRunning_ && groupToAdd->isPauseRequested()) ||
|
||||
!groupToAdd->isDependencyResolved()) {
|
||||
pending.push_back(groupToAdd);
|
||||
continue;
|
||||
|
@ -84,8 +84,9 @@ private:
|
||||
|
||||
NetStat netStat_;
|
||||
|
||||
// true if JSON-RPC/XML-RPC is enabled.
|
||||
bool rpc_;
|
||||
// true if download engine should keep running even if there is no
|
||||
// download to perform.
|
||||
bool keepRunning_;
|
||||
|
||||
bool queueCheck_;
|
||||
|
||||
@ -335,6 +336,11 @@ public:
|
||||
// Initializes WrDiskCache according to PREF_DISK_CACHE option. If
|
||||
// its value is 0, cache storage will not be initialized.
|
||||
void initWrDiskCache();
|
||||
|
||||
void setKeepRunning(bool flag)
|
||||
{
|
||||
keepRunning_ = flag;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
@ -106,6 +106,13 @@ int sessionFinal(Session* session)
|
||||
return rv;
|
||||
}
|
||||
|
||||
int sessionConfigSetKeepRunning(Session* session, bool flag)
|
||||
{
|
||||
session->context->reqinfo->getDownloadEngine()->getRequestGroupMan()
|
||||
->setKeepRunning(flag);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int run(Session* session, RUN_MODE mode)
|
||||
{
|
||||
const SharedHandle<DownloadEngine>& e =
|
||||
@ -113,6 +120,18 @@ int run(Session* session, RUN_MODE mode)
|
||||
return e->run(mode == RUN_ONCE);
|
||||
}
|
||||
|
||||
int shutdown(Session* session, bool force)
|
||||
{
|
||||
const SharedHandle<DownloadEngine>& e =
|
||||
session->context->reqinfo->getDownloadEngine();
|
||||
if(force) {
|
||||
e->requestForceHalt();
|
||||
} else {
|
||||
e->requestHalt();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string gidToHex(const A2Gid& gid)
|
||||
{
|
||||
return GroupId::toHex(gid);
|
||||
|
@ -94,6 +94,13 @@ enum RUN_MODE {
|
||||
RUN_ONCE
|
||||
};
|
||||
|
||||
// If the |flag| is true, run(session, RUN_ONCE) will return 1 even if
|
||||
// there are no download to perform. The behavior is very similar to
|
||||
// RPC server, except that this option does not enable RPC
|
||||
// functionality. To stop aria2, use shutdown() function. This
|
||||
// function returns 0 if it succeeds, or -1.
|
||||
int sessionConfigSetKeepRunning(Session* session, bool flag);
|
||||
|
||||
// Performs event polling and actions for them. If the |mode| is
|
||||
// RUN_DEFAULT, this function returns when no downloads are left to be
|
||||
// processed. In this case, this function returns 0.
|
||||
@ -147,9 +154,13 @@ int removeDownload(Session* session, const A2Gid& gid, bool force = false);
|
||||
// download is placed on the first position of waiting queue. As long
|
||||
// as the status is DOWNLOAD_PAUSED, the download will not start. To
|
||||
// change status to DOWNLOAD_WAITING, use unpauseDownload() function.
|
||||
// If the |force| is true, removal will take place without any action
|
||||
// If the |force| is true, pause will take place without any action
|
||||
// which takes time such as contacting BitTorrent tracker. This
|
||||
// function returns 0 if it succeeds, or -1.
|
||||
// function returns 0 if it succeeds, or -1. Please note that, to
|
||||
// make pause work, the application must call
|
||||
// sessionConfigSetKeepRunning() function with the |flag| argument to
|
||||
// true. Without this call, download may be paused at first, but it
|
||||
// will be restarted automatically.
|
||||
int pauseDownload(Session* session, const A2Gid& gid, bool force = false);
|
||||
|
||||
// Changes the status of the download denoted by the |gid| from
|
||||
@ -157,6 +168,13 @@ int pauseDownload(Session* session, const A2Gid& gid, bool force = false);
|
||||
// eligible to restart. This function returns 0 if it succeeds, or -1.
|
||||
int unpauseDownload(Session* session, const A2Gid& gid);
|
||||
|
||||
// Schedules shutdown. If the |force| is true, shutdown will take
|
||||
// place without any action which takes time such as contacting
|
||||
// BitTorrent tracker. After this call, the application must keep
|
||||
// calling run() method until it returns 0. This function returns 0
|
||||
// if it succeeds, or -1.
|
||||
int shutdown(Session* session, bool force = false);
|
||||
|
||||
enum UriStatus {
|
||||
URI_USED,
|
||||
URI_WAITING
|
||||
|
Loading…
Reference in New Issue
Block a user