2010-01-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Treat --dir="" as --dir="."
	* src/FtpNegotiationCommand.cc
	* src/HttpResponseCommand.cc
	* src/Metalink2RequestGroup.cc
	* src/UTMetadataPostDownloadHandler.cc
	* src/bittorrent_helper.cc
	* src/download_helper.cc
	* src/util.cc
	* src/util.h
	* test/UtilTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-01-11 14:01:20 +00:00
parent 2b62660e49
commit 4c89170488
10 changed files with 60 additions and 20 deletions

View File

@ -1,3 +1,16 @@
2010-01-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Treat --dir="" as --dir="."
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/Metalink2RequestGroup.cc
* src/UTMetadataPostDownloadHandler.cc
* src/bittorrent_helper.cc
* src/download_helper.cc
* src/util.cc
* src/util.h
* test/UtilTest.cc
2010-01-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Code clean up.

View File

@ -336,8 +336,8 @@ bool FtpNegotiationCommand::onFileSizeDetermined(uint64_t totalLength)
_fileEntry->setLength(totalLength);
if(_fileEntry->getPath().empty()) {
_fileEntry->setPath
(strconcat(getDownloadContext()->getDir(),
"/", util::urldecode(req->getFile())));
(util::applyDir
(getDownloadContext()->getDir(), util::urldecode(req->getFile())));
}
_requestGroup->preDownloadProcessing();
if(e->_requestGroupMan->isSameFileBeingDownloaded(_requestGroup)) {

View File

@ -131,8 +131,8 @@ bool HttpResponseCommand::executeInternal()
_fileEntry->setLength(totalLength);
if(_fileEntry->getPath().empty()) {
_fileEntry->setPath
(strconcat(getDownloadContext()->getDir(),
"/", httpResponse->determinFilename()));
(util::applyDir
(getDownloadContext()->getDir(), httpResponse->determinFilename()));
}
_fileEntry->setContentType(httpResponse->getContentType());
_requestGroup->preDownloadProcessing();

View File

@ -218,7 +218,7 @@ Metalink2RequestGroup::createRequestGroup
(new DownloadContext
(pieceLength,
entry->getLength(),
strconcat(option->get(PREF_DIR), "/", entry->file->getPath())));
util::applyDir(option->get(PREF_DIR), entry->file->getPath())));
dctx->setDir(option->get(PREF_DIR));
dctx->getFirstFileEntry()->setUris(uris);
if(option->getAsBool(PREF_METALINK_ENABLE_UNIQUE_PROTOCOL)) {

View File

@ -82,23 +82,22 @@ void UTMetadataPostDownloadHandler::getNextRequestGroups
util::toString(requestGroup->getPieceStorage()->getDiskAdaptor());
std::string torrent = bittorrent::metadata2Torrent(metadata, attrs);
std::deque<SharedHandle<RequestGroup> > newRgs;
createRequestGroupForBitTorrent(newRgs, requestGroup->getOption(),
std::deque<std::string>(), torrent);
requestGroup->followedBy(newRgs.begin(), newRgs.end());
groups.insert(groups.end(), newRgs.begin(), newRgs.end());
if(requestGroup->getOption()->getAsBool(PREF_BT_SAVE_METADATA)) {
std::string filename = requestGroup->getOption()->get(PREF_DIR);
filename += A2STR::SLASH_C;
filename += util::toHex(attrs[bittorrent::INFO_HASH].s());
filename += ".torrent";
std::string filename =
util::applyDir(requestGroup->getOption()->get(PREF_DIR),
util::toHex(attrs[bittorrent::INFO_HASH].s())+".torrent");
if(util::saveAs(filename, torrent)) {
_logger->notice(MSG_METADATA_SAVED, filename.c_str());
} else {
_logger->notice(MSG_METADATA_NOT_SAVED, filename.c_str());
}
}
std::deque<SharedHandle<RequestGroup> > newRgs;
createRequestGroupForBitTorrent(newRgs, requestGroup->getOption(),
std::deque<std::string>(), torrent);
requestGroup->followedBy(newRgs.begin(), newRgs.end());
groups.insert(groups.end(), newRgs.begin(), newRgs.end());
}
} // namespace aria2

View File

@ -260,7 +260,7 @@ static void extractFileEntries
std::deque<std::string> uris;
createUri(urlList.begin(), urlList.end(), std::back_inserter(uris), path);
SharedHandle<FileEntry> fileEntry
(new FileEntry(strconcat(ctx->getDir(), "/", path),
(new FileEntry(util::applyDir(ctx->getDir(), path),
fileLengthData.i(),
offset, uris));
fileEntries.push_back(fileEntry);
@ -289,13 +289,13 @@ static void extractFileEntries
}
SharedHandle<FileEntry> fileEntry
(new FileEntry(strconcat(ctx->getDir(), "/", name),totalLength, 0,
(new FileEntry(util::applyDir(ctx->getDir(), name),totalLength, 0,
uris));
fileEntries.push_back(fileEntry);
}
ctx->setFileEntries(fileEntries.begin(), fileEntries.end());
if(torrent[MODE].s() == MULTI) {
ctx->setBasePath(strconcat(ctx->getDir(), "/", name));
ctx->setBasePath(util::applyDir(ctx->getDir(), name));
}
}

View File

@ -190,7 +190,7 @@ static SharedHandle<RequestGroup> createRequestGroup
(option->getAsInt(PREF_SEGMENT_SIZE),
0,
useOutOption&&!option->blank(PREF_OUT)?
strconcat(option->get(PREF_DIR), "/", option->get(PREF_OUT)):A2STR::NIL));
util::applyDir(option->get(PREF_DIR), option->get(PREF_OUT)):A2STR::NIL));
dctx->setDir(option->get(PREF_DIR));
dctx->getFirstFileEntry()->setUris(uris);
rg->setDownloadContext(dctx);
@ -223,7 +223,7 @@ createBtRequestGroup(const std::string& torrentFilePath,
for(std::map<size_t, std::string>::const_iterator i = indexPathMap.begin();
i != indexPathMap.end(); ++i) {
dctx->setFilePathWithIndex
((*i).first, strconcat(dctx->getDir(), "/", (*i).second));
((*i).first, util::applyDir(dctx->getDir(), (*i).second));
}
rg->setDownloadContext(dctx);
return rg;

View File

@ -1000,6 +1000,17 @@ bool saveAs
return File(tempFilename).renameTo(filename);
}
std::string applyDir(const std::string& dir, const std::string& relPath)
{
if(dir.empty()) {
return strconcat(A2STR::DOT_C, A2STR::SLASH_C, relPath);
} else if(dir == A2STR::SLASH_C) {
return strconcat(A2STR::SLASH_C, relPath);
} else {
return strconcat(dir, A2STR::SLASH_C, relPath);
}
}
} // namespace util
} // namespace aria2

View File

@ -355,6 +355,13 @@ void generateRandomData(unsigned char* data, size_t length);
bool saveAs
(const std::string& filename, const std::string& data, bool overwrite=false);
// Prepend dir to relPath. If dir is empty, it prepends "." to relPath.
//
// dir = "/dir", relPath = "foo" => "/dir/foo"
// dir = "", relPath = "foo" => "./foo"
// dir = "/", relPath = "foo" => "/foo"
std::string applyDir(const std::string& dir, const std::string& relPath);
} // namespace util
} // namespace aria2

View File

@ -58,6 +58,7 @@ class UtilTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testGenerateRandomData);
CPPUNIT_TEST(testFromHex);
CPPUNIT_TEST(testParsePrioritizePieceRange);
CPPUNIT_TEST(testApplyDir);
CPPUNIT_TEST_SUITE_END();
private:
@ -104,6 +105,7 @@ public:
void testGenerateRandomData();
void testFromHex();
void testParsePrioritizePieceRange();
void testApplyDir();
};
@ -900,4 +902,12 @@ void UtilTest::testParsePrioritizePieceRange()
CPPUNIT_ASSERT(result.empty());
}
void UtilTest::testApplyDir()
{
CPPUNIT_ASSERT_EQUAL(std::string("./pred"), util::applyDir("", "pred"));
CPPUNIT_ASSERT_EQUAL(std::string("/pred"), util::applyDir("/", "pred"));
CPPUNIT_ASSERT_EQUAL(std::string("./pred"), util::applyDir(".", "pred"));
CPPUNIT_ASSERT_EQUAL(std::string("/dl/pred"), util::applyDir("/dl", "pred"));
}
} // namespace aria2