summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdoc/xmlrpc/aria2rpc1
-rw-r--r--src/BtPostDownloadHandler.cc11
-rw-r--r--src/MetalinkPostDownloadHandler.cc11
-rw-r--r--src/OptionHandlerFactory.cc13
-rw-r--r--src/UTMetadataPostDownloadHandler.cc11
-rw-r--r--src/prefs.cc2
-rw-r--r--src/prefs.h2
-rw-r--r--src/usage_text.h11
8 files changed, 62 insertions, 0 deletions
diff --git a/doc/xmlrpc/aria2rpc b/doc/xmlrpc/aria2rpc
index 5b47e0cc..934fbdbc 100755
--- a/doc/xmlrpc/aria2rpc
+++ b/doc/xmlrpc/aria2rpc
@@ -232,6 +232,7 @@ OptionParser.new do |opt|
opt.on("--server-stat-of FILE"){|val| options["server-stat-of"]=val}
opt.on("--save-cookies FILE"){|val| options["save-cookies"]=val}
opt.on("--gid GID"){|val| options["gid"]=val}
+ opt.on("--pause-metadata [BOOL]",["true","false"]){|val| options["pause-metadata"]=val||"true"}
opt.on("--server SERVER", "hostname of XML-RPC server. Default: localhost"){|val| options["server"]=val }
opt.on("--port PORT", "port of XML-RPC server. Default: 6800"){|val| options["port"]=val }
diff --git a/src/BtPostDownloadHandler.cc b/src/BtPostDownloadHandler.cc
index 9639a6da..4f64b3a4 100644
--- a/src/BtPostDownloadHandler.cc
+++ b/src/BtPostDownloadHandler.cc
@@ -52,6 +52,7 @@
#include "DiskWriter.h"
#include "AbstractSingleDiskAdaptor.h"
#include "BencodeDiskWriter.h"
+#include "RequestGroupMan.h"
namespace aria2 {
@@ -108,6 +109,16 @@ void BtPostDownloadHandler::getNextRequestGroups
if(mi) {
setMetadataInfo(newRgs.begin(), newRgs.end(), mi);
}
+
+ auto rgman = requestGroup->getRequestGroupMan();
+
+ if(rgman && rgman->getKeepRunning() &&
+ requestGroup->getOption()->getAsBool(PREF_PAUSE_METADATA)) {
+ for(auto& rg : newRgs) {
+ rg->setPauseRequested(true);
+ }
+ }
+
groups.insert(groups.end(), newRgs.begin(), newRgs.end());
}
diff --git a/src/MetalinkPostDownloadHandler.cc b/src/MetalinkPostDownloadHandler.cc
index 44696084..99989e09 100644
--- a/src/MetalinkPostDownloadHandler.cc
+++ b/src/MetalinkPostDownloadHandler.cc
@@ -51,6 +51,7 @@
#include "download_helper.h"
#include "fmt.h"
#include "FileEntry.h"
+#include "RequestGroupMan.h"
namespace aria2 {
@@ -105,6 +106,16 @@ void MetalinkPostDownloadHandler::getNextRequestGroups
if(mi) {
setMetadataInfo(newRgs.begin(), newRgs.end(), mi);
}
+
+ auto rgman = requestGroup->getRequestGroupMan();
+
+ if(rgman && rgman->getKeepRunning() &&
+ requestGroup->getOption()->getAsBool(PREF_PAUSE_METADATA)) {
+ for(auto& rg : newRgs) {
+ rg->setPauseRequested(true);
+ }
+ }
+
groups.insert(groups.end(), newRgs.begin(), newRgs.end());
diskAdaptor->closeFile();
} catch(Exception& e) {
diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc
index a08e6634..409f2eab 100644
--- a/src/OptionHandlerFactory.cc
+++ b/src/OptionHandlerFactory.cc
@@ -681,6 +681,19 @@ std::vector<OptionHandler*> OptionHandlerFactory::createOptionHandlers()
}
{
OptionHandler* op(new BooleanOptionHandler
+ (PREF_PAUSE_METADATA,
+ TEXT_PAUSE_METADATA,
+ A2_V_FALSE,
+ OptionHandler::OPT_ARG));
+ op->addTag(TAG_ADVANCED);
+ op->addTag(TAG_RPC);
+ op->setInitialOption(true);
+ op->setChangeGlobalOption(true);
+ op->setChangeOptionForReserved(true);
+ handlers.push_back(op);
+ }
+ {
+ OptionHandler* op(new BooleanOptionHandler
(PREF_QUIET,
TEXT_QUIET,
A2_V_FALSE,
diff --git a/src/UTMetadataPostDownloadHandler.cc b/src/UTMetadataPostDownloadHandler.cc
index ff006d8a..3d48f135 100644
--- a/src/UTMetadataPostDownloadHandler.cc
+++ b/src/UTMetadataPostDownloadHandler.cc
@@ -50,6 +50,7 @@
#include "prefs.h"
#include "Option.h"
#include "fmt.h"
+#include "RequestGroupMan.h"
namespace aria2 {
@@ -107,6 +108,16 @@ void UTMetadataPostDownloadHandler::getNextRequestGroups
setMetadataInfo(newRgs.begin(), newRgs.end(),
requestGroup->getMetadataInfo());
}
+
+ auto rgman = requestGroup->getRequestGroupMan();
+
+ if(rgman && rgman->getKeepRunning() &&
+ requestGroup->getOption()->getAsBool(PREF_PAUSE_METADATA)) {
+ for(auto& rg : newRgs) {
+ rg->setPauseRequested(true);
+ }
+ }
+
groups.insert(groups.end(), newRgs.begin(), newRgs.end());
}
}
diff --git a/src/prefs.cc b/src/prefs.cc
index 2ffc976c..8367f38d 100644
--- a/src/prefs.cc
+++ b/src/prefs.cc
@@ -363,6 +363,8 @@ PrefPtr PREF_ENABLE_COLOR = makePref("enable-color");
PrefPtr PREF_RPC_SECRET = makePref("rpc-secret");
// values: 1*digit
PrefPtr PREF_DSCP = makePref("dscp");
+// values: true | false
+PrefPtr PREF_PAUSE_METADATA = makePref("pause-metadata");
/**
* FTP related preferences
diff --git a/src/prefs.h b/src/prefs.h
index 592bad9a..dfdb9494 100644
--- a/src/prefs.h
+++ b/src/prefs.h
@@ -300,6 +300,8 @@ extern PrefPtr PREF_ENABLE_COLOR;
extern PrefPtr PREF_RPC_SECRET;
// values: 1*digit
extern PrefPtr PREF_DSCP;
+// values: true | false
+extern PrefPtr PREF_PAUSE_METADATA;
/**
* FTP related preferences
diff --git a/src/usage_text.h b/src/usage_text.h
index 15a13f1d..8bb25dff 100644
--- a/src/usage_text.h
+++ b/src/usage_text.h
@@ -980,3 +980,14 @@
" commonly used values from RFC, network vendors'\n" \
" documentation, Wikipedia or any other source,\n" \
" use them as they are.")
+#define TEXT_PAUSE_METADATA \
+ _(" --pause-metadata[=true|false]\n" \
+ " Pause downloads created as a result of metadata\n" \
+ " download. There are 3 types of metadata\n" \
+ " downloads in aria2: (1) downloading .torrent\n" \
+ " file. (2) downloading torrent metadata using\n" \
+ " magnet link. (3) downloading metalink file.\n" \
+ " These metadata downloads will generate downloads\n" \
+ " using their metadata. This option pauses these\n" \
+ " subsequent downloads. This option is effective\n" \
+ " only when --enable-rpc=true is given.")