mirror of https://github.com/aria2/aria2
2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Pass reference of Option object instead of pointer. * src/download_helper.cc * src/download_helper.h * src/main.cc * test/DownloadHelperTest.ccpull/1/head
parent
40d5c1e763
commit
ce9c79a2f3
|
@ -1,3 +1,11 @@
|
|||
2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Pass reference of Option object instead of pointer.
|
||||
* src/download_helper.cc
|
||||
* src/download_helper.h
|
||||
* src/main.cc
|
||||
* test/DownloadHelperTest.cc
|
||||
|
||||
2009-05-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Don't retrieve PREF_MAX_DOWNLOAD_LIMIT and PREF_MAX_UPLOAD_LIMIT
|
||||
|
|
|
@ -92,13 +92,13 @@ static void splitURI(std::deque<std::string>& result,
|
|||
}
|
||||
|
||||
static SharedHandle<RequestGroup> createRequestGroup
|
||||
(const Option* op, const std::deque<std::string>& uris,
|
||||
(const Option& op, const std::deque<std::string>& uris,
|
||||
const Option& requestOption,
|
||||
bool useOutOption = false)
|
||||
{
|
||||
SharedHandle<RequestGroup> rg(new RequestGroup(op, uris));
|
||||
SharedHandle<RequestGroup> rg(new RequestGroup(&op, uris));
|
||||
SharedHandle<SingleFileDownloadContext> dctx
|
||||
(new SingleFileDownloadContext(op->getAsInt(PREF_SEGMENT_SIZE),
|
||||
(new SingleFileDownloadContext(op.getAsInt(PREF_SEGMENT_SIZE),
|
||||
0,
|
||||
A2STR::NIL,
|
||||
useOutOption&&!requestOption.blank(PREF_OUT)?
|
||||
|
@ -114,16 +114,16 @@ static SharedHandle<RequestGroup> createRequestGroup
|
|||
static
|
||||
SharedHandle<RequestGroup>
|
||||
createBtRequestGroup(const std::string& torrentFilePath,
|
||||
Option* op,
|
||||
const Option& op,
|
||||
const std::deque<std::string>& auxUris,
|
||||
const Option& requestOption)
|
||||
{
|
||||
SharedHandle<RequestGroup> rg(new RequestGroup(op, auxUris));
|
||||
SharedHandle<RequestGroup> rg(new RequestGroup(&op, auxUris));
|
||||
SharedHandle<DefaultBtContext> btContext(new DefaultBtContext());
|
||||
btContext->setDir(requestOption.get(PREF_DIR));
|
||||
btContext->load(torrentFilePath);// may throw exception
|
||||
if(op->defined(PREF_PEER_ID_PREFIX)) {
|
||||
btContext->setPeerIdPrefix(op->get(PREF_PEER_ID_PREFIX));
|
||||
if(op.defined(PREF_PEER_ID_PREFIX)) {
|
||||
btContext->setPeerIdPrefix(op.get(PREF_PEER_ID_PREFIX));
|
||||
}
|
||||
btContext->setFileFilter
|
||||
(Util::parseIntRange(requestOption.get(PREF_SELECT_FILE)));
|
||||
|
@ -141,21 +141,21 @@ createBtRequestGroup(const std::string& torrentFilePath,
|
|||
}
|
||||
|
||||
void createRequestGroupForBitTorrent
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
|
||||
const std::deque<std::string>& uris)
|
||||
{
|
||||
std::deque<std::string> nargs;
|
||||
if(op->get(PREF_PARAMETERIZED_URI) == V_TRUE) {
|
||||
if(op.get(PREF_PARAMETERIZED_URI) == V_TRUE) {
|
||||
unfoldURI(nargs, uris);
|
||||
} else {
|
||||
nargs = uris;
|
||||
}
|
||||
// we ignore -Z option here
|
||||
size_t numSplit = op->getAsInt(PREF_SPLIT);
|
||||
size_t numSplit = op.getAsInt(PREF_SPLIT);
|
||||
std::deque<std::string> auxUris;
|
||||
splitURI(auxUris, nargs.begin(), nargs.end(), numSplit);
|
||||
SharedHandle<RequestGroup> rg =
|
||||
createBtRequestGroup(op->get(PREF_TORRENT_FILE), op, auxUris, *op);
|
||||
createBtRequestGroup(op.get(PREF_TORRENT_FILE), op, auxUris, op);
|
||||
rg->setNumConcurrentCommand(numSplit);
|
||||
result.push_back(rg);
|
||||
}
|
||||
|
@ -164,9 +164,9 @@ void createRequestGroupForBitTorrent
|
|||
|
||||
#ifdef ENABLE_METALINK
|
||||
void createRequestGroupForMetalink
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op)
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op)
|
||||
{
|
||||
Metalink2RequestGroup(op).generate(result, op->get(PREF_METALINK_FILE), *op);
|
||||
Metalink2RequestGroup(&op).generate(result, op.get(PREF_METALINK_FILE), op);
|
||||
if(result.empty()) {
|
||||
throw FatalException(MSG_NO_FILES_TO_DOWNLOAD);
|
||||
}
|
||||
|
@ -177,11 +177,11 @@ class AccRequestGroup {
|
|||
private:
|
||||
std::deque<SharedHandle<RequestGroup> >& _requestGroups;
|
||||
ProtocolDetector _detector;
|
||||
Option* _op;
|
||||
const Option& _op;
|
||||
const Option& _requestOption;
|
||||
public:
|
||||
AccRequestGroup(std::deque<SharedHandle<RequestGroup> >& requestGroups,
|
||||
Option* op,
|
||||
const Option& op,
|
||||
const Option& requestOption):
|
||||
_requestGroups(requestGroups), _op(op), _requestOption(requestOption) {}
|
||||
|
||||
|
@ -190,7 +190,7 @@ public:
|
|||
{
|
||||
if(_detector.isStreamProtocol(uri)) {
|
||||
std::deque<std::string> streamURIs;
|
||||
size_t numSplit = _op->getAsInt(PREF_SPLIT);
|
||||
size_t numSplit = _op.getAsInt(PREF_SPLIT);
|
||||
for(size_t i = 0; i < numSplit; ++i) {
|
||||
streamURIs.push_back(uri);
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ public:
|
|||
#ifdef ENABLE_METALINK
|
||||
else if(_detector.guessMetalinkFile(uri)) {
|
||||
try {
|
||||
Metalink2RequestGroup(_op).generate(_requestGroups, uri,
|
||||
Metalink2RequestGroup(&_op).generate(_requestGroups, uri,
|
||||
_requestOption);
|
||||
} catch(RecoverableException& e) {
|
||||
// error occurred while parsing metalink file.
|
||||
|
@ -247,16 +247,16 @@ static void copyIfndef(Option& dest, const Option& src, const std::string& name)
|
|||
}
|
||||
|
||||
static void createRequestGroupForUri
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
|
||||
const std::deque<std::string>& uris, const Option& requestOption)
|
||||
{
|
||||
std::deque<std::string> nargs;
|
||||
if(op->get(PREF_PARAMETERIZED_URI) == V_TRUE) {
|
||||
if(op.get(PREF_PARAMETERIZED_URI) == V_TRUE) {
|
||||
unfoldURI(nargs, uris);
|
||||
} else {
|
||||
nargs = uris;
|
||||
}
|
||||
if(op->get(PREF_FORCE_SEQUENTIAL) == V_TRUE) {
|
||||
if(op.get(PREF_FORCE_SEQUENTIAL) == V_TRUE) {
|
||||
std::for_each(nargs.begin(), nargs.end(),
|
||||
AccRequestGroup(result, op, requestOption));
|
||||
} else {
|
||||
|
@ -264,7 +264,7 @@ static void createRequestGroupForUri
|
|||
std::stable_partition(nargs.begin(), nargs.end(), StreamProtocolFilter());
|
||||
// let's process http/ftp protocols first.
|
||||
if(nargs.begin() != strmProtoEnd) {
|
||||
size_t numSplit = op->getAsInt(PREF_SPLIT);
|
||||
size_t numSplit = op.getAsInt(PREF_SPLIT);
|
||||
std::deque<std::string> streamURIs;
|
||||
splitURI(streamURIs, nargs.begin(), strmProtoEnd,
|
||||
numSplit);
|
||||
|
@ -280,10 +280,10 @@ static void createRequestGroupForUri
|
|||
}
|
||||
|
||||
void createRequestGroupForUri
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
|
||||
const std::deque<std::string>& uris)
|
||||
{
|
||||
createRequestGroupForUri(result, op, uris, *op);
|
||||
createRequestGroupForUri(result, op, uris, op);
|
||||
}
|
||||
|
||||
template<typename InputIterator>
|
||||
|
@ -296,7 +296,8 @@ static void foreachCopyIfndef(InputIterator first, InputIterator last,
|
|||
}
|
||||
|
||||
static void createRequestGroupForUriList
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op, std::istream& in)
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
|
||||
std::istream& in)
|
||||
{
|
||||
UriListParser p(in);
|
||||
while(p.hasNext()) {
|
||||
|
@ -316,24 +317,24 @@ static void createRequestGroupForUriList
|
|||
};
|
||||
foreachCopyIfndef(&REQUEST_OPTIONS[0],
|
||||
&REQUEST_OPTIONS[arrayLength(REQUEST_OPTIONS)],
|
||||
requestOption, *op);
|
||||
requestOption, op);
|
||||
|
||||
createRequestGroupForUri(result, op, uris, requestOption);
|
||||
}
|
||||
}
|
||||
|
||||
void createRequestGroupForUriList
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op)
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op)
|
||||
{
|
||||
if(op->get(PREF_INPUT_FILE) == "-") {
|
||||
if(op.get(PREF_INPUT_FILE) == "-") {
|
||||
createRequestGroupForUriList(result, op, std::cin);
|
||||
} else {
|
||||
if(!File(op->get(PREF_INPUT_FILE)).isFile()) {
|
||||
if(!File(op.get(PREF_INPUT_FILE)).isFile()) {
|
||||
throw FatalException
|
||||
(StringFormat(EX_FILE_OPEN, op->get(PREF_INPUT_FILE).c_str(),
|
||||
(StringFormat(EX_FILE_OPEN, op.get(PREF_INPUT_FILE).c_str(),
|
||||
"No such file").str());
|
||||
}
|
||||
std::ifstream f(op->get(PREF_INPUT_FILE).c_str(), std::ios::binary);
|
||||
std::ifstream f(op.get(PREF_INPUT_FILE).c_str(), std::ios::binary);
|
||||
createRequestGroupForUriList(result, op, f);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ class Option;
|
|||
// Create RequestGroup object using torrent file specified by torrent-file
|
||||
// option. In this function, force-sequential is ignored.
|
||||
void createRequestGroupForBitTorrent
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
|
||||
const std::deque<std::string>& uris);
|
||||
#endif // ENABLE_BITTORRENT
|
||||
|
||||
|
@ -59,7 +59,7 @@ void createRequestGroupForBitTorrent
|
|||
// Create RequestGroup objects using Metalink file specified by metalink-file
|
||||
// option.
|
||||
void createRequestGroupForMetalink
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op);
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op);
|
||||
#endif // ENABLE_METALINK
|
||||
|
||||
// Create RequestGroup objects from reading file specified by input-file option.
|
||||
|
@ -68,11 +68,11 @@ void createRequestGroupForMetalink
|
|||
// The additional out and dir options can be specified after each line of URIs.
|
||||
// This optional line must start with white space(s).
|
||||
void createRequestGroupForUriList
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op);
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op);
|
||||
|
||||
// Create RequestGroup object using provided uris.
|
||||
void createRequestGroupForUri
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, Option* op,
|
||||
(std::deque<SharedHandle<RequestGroup> >& result, const Option& op,
|
||||
const std::deque<std::string>& uris);
|
||||
|
||||
} // namespace aria2
|
||||
|
|
18
src/main.cc
18
src/main.cc
|
@ -115,10 +115,10 @@ static void showTorrentFile(const std::string& uri)
|
|||
#endif // ENABLE_BITTORRENT
|
||||
|
||||
#ifdef ENABLE_METALINK
|
||||
static void showMetalinkFile(const std::string& uri, const Option* op)
|
||||
static void showMetalinkFile(const std::string& uri, const Option& op)
|
||||
{
|
||||
std::deque<SharedHandle<MetalinkEntry> > metalinkEntries;
|
||||
MetalinkHelper::parseAndQuery(metalinkEntries, uri, op);
|
||||
MetalinkHelper::parseAndQuery(metalinkEntries, uri, &op);
|
||||
std::deque<SharedHandle<FileEntry> > fileEntries;
|
||||
MetalinkEntry::toFileEntry(fileEntries, metalinkEntries);
|
||||
Util::toStream(std::cout, fileEntries);
|
||||
|
@ -127,7 +127,7 @@ static void showMetalinkFile(const std::string& uri, const Option* op)
|
|||
#endif // ENABLE_METALINK
|
||||
|
||||
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
|
||||
static void showFiles(const std::deque<std::string>& uris, const Option* op)
|
||||
static void showFiles(const std::deque<std::string>& uris, const Option& op)
|
||||
{
|
||||
ProtocolDetector dt;
|
||||
for(std::deque<std::string>::const_iterator i = uris.begin();
|
||||
|
@ -210,7 +210,7 @@ DownloadResult::RESULT main(int argc, char* argv[])
|
|||
showTorrentFile(op.get(PREF_TORRENT_FILE));
|
||||
return exitStatus;
|
||||
} else {
|
||||
createRequestGroupForBitTorrent(requestGroups, &op, args);
|
||||
createRequestGroupForBitTorrent(requestGroups, op, args);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -218,22 +218,22 @@ DownloadResult::RESULT main(int argc, char* argv[])
|
|||
#ifdef ENABLE_METALINK
|
||||
if(!op.blank(PREF_METALINK_FILE)) {
|
||||
if(op.get(PREF_SHOW_FILES) == V_TRUE) {
|
||||
showMetalinkFile(op.get(PREF_METALINK_FILE), &op);
|
||||
showMetalinkFile(op.get(PREF_METALINK_FILE), op);
|
||||
return exitStatus;
|
||||
} else {
|
||||
createRequestGroupForMetalink(requestGroups, &op);
|
||||
createRequestGroupForMetalink(requestGroups, op);
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif // ENABLE_METALINK
|
||||
if(!op.blank(PREF_INPUT_FILE)) {
|
||||
createRequestGroupForUriList(requestGroups, &op);
|
||||
createRequestGroupForUriList(requestGroups, op);
|
||||
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
|
||||
} else if(op.get(PREF_SHOW_FILES) == V_TRUE) {
|
||||
showFiles(args, &op);
|
||||
showFiles(args, op);
|
||||
#endif // ENABLE_METALINK || ENABLE_METALINK
|
||||
} else {
|
||||
createRequestGroupForUri(requestGroups, &op, args);
|
||||
createRequestGroupForUri(requestGroups, op, args);
|
||||
}
|
||||
|
||||
if(requestGroups.empty()) {
|
||||
|
|
|
@ -73,7 +73,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
SharedHandle<RequestGroup> group = result[0];
|
||||
|
@ -93,7 +93,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
SharedHandle<RequestGroup> group = result[0];
|
||||
|
@ -112,7 +112,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
SharedHandle<RequestGroup> group = result[0];
|
||||
|
@ -128,7 +128,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)3, result.size());
|
||||
|
||||
|
@ -164,7 +164,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_parameterized()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
SharedHandle<RequestGroup> group = result[0];
|
||||
|
@ -201,7 +201,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_BitTorrent()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, result.size());
|
||||
SharedHandle<RequestGroup> group = result[0];
|
||||
|
@ -251,7 +251,7 @@ void DownloadHelperTest::testCreateRequestGroupForUri_Metalink()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUri(result, &op, uris);
|
||||
createRequestGroupForUri(result, op, uris);
|
||||
|
||||
// group1: http://alpha/file, ...
|
||||
// group2-7: 6 file entry in Metalink and 1 torrent file download
|
||||
|
@ -300,7 +300,7 @@ void DownloadHelperTest::testCreateRequestGroupForUriList()
|
|||
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForUriList(result, &op);
|
||||
createRequestGroupForUriList(result, op);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, result.size());
|
||||
|
||||
|
@ -341,7 +341,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForBitTorrent(result, &op, auxURIs);
|
||||
createRequestGroupForBitTorrent(result, op, auxURIs);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
|
||||
|
@ -361,7 +361,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
|
|||
// no URIs are given
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
std::deque<std::string> emptyURIs;
|
||||
createRequestGroupForBitTorrent(result, &op, emptyURIs);
|
||||
createRequestGroupForBitTorrent(result, op, emptyURIs);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
SharedHandle<RequestGroup> group = result[0];
|
||||
|
@ -373,7 +373,7 @@ void DownloadHelperTest::testCreateRequestGroupForBitTorrent()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForBitTorrent(result, &op, auxURIs);
|
||||
createRequestGroupForBitTorrent(result, op, auxURIs);
|
||||
|
||||
// See --force-requencial is ignored
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, result.size());
|
||||
|
@ -393,7 +393,7 @@ void DownloadHelperTest::testCreateRequestGroupForMetalink()
|
|||
{
|
||||
std::deque<SharedHandle<RequestGroup> > result;
|
||||
|
||||
createRequestGroupForMetalink(result, &op);
|
||||
createRequestGroupForMetalink(result, op);
|
||||
|
||||
#ifdef ENABLE_BITTORRENT
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)6, result.size());
|
||||
|
|
Loading…
Reference in New Issue