mirror of https://github.com/aria2/aria2
2009-06-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
DownloadContext now has _fileEntries so that DownloadContext::getFileEntries() can returns its const reference. * src/DefaultBtContext.cc * src/DefaultBtContext.h * src/DownloadContext.cc * src/DownloadContext.h * src/SingleFileDownloadContext.cc * src/SingleFileDownloadContext.hpull/1/head
parent
9120e79ff1
commit
39472a64eb
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2009-06-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
DownloadContext now has _fileEntries so that
|
||||||
|
DownloadContext::getFileEntries() can returns its const reference.
|
||||||
|
* src/DefaultBtContext.cc
|
||||||
|
* src/DefaultBtContext.h
|
||||||
|
* src/DownloadContext.cc
|
||||||
|
* src/DownloadContext.h
|
||||||
|
* src/SingleFileDownloadContext.cc
|
||||||
|
* src/SingleFileDownloadContext.h
|
||||||
|
|
||||||
2009-06-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-06-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Moved getFirstRequestedFileEntry(), countRequestedFileEntry() and
|
Moved getFirstRequestedFileEntry(), countRequestedFileEntry() and
|
||||||
|
|
|
@ -122,7 +122,7 @@ void DefaultBtContext::clear() {
|
||||||
memset(infoHash, 0, INFO_HASH_LENGTH);
|
memset(infoHash, 0, INFO_HASH_LENGTH);
|
||||||
infoHashString = A2STR::NIL;
|
infoHashString = A2STR::NIL;
|
||||||
pieceHashes.clear();
|
pieceHashes.clear();
|
||||||
fileEntries.clear();
|
_fileEntries.clear();
|
||||||
totalLength = 0;
|
totalLength = 0;
|
||||||
pieceLength = 0;
|
pieceLength = 0;
|
||||||
fileMode = BtContext::SINGLE;
|
fileMode = BtContext::SINGLE;
|
||||||
|
@ -211,7 +211,7 @@ void DefaultBtContext::extractFileEntries(const BDE& infoDict,
|
||||||
FileEntryHandle fileEntry(new FileEntry(strconcat(_dir, "/", path),
|
FileEntryHandle fileEntry(new FileEntry(strconcat(_dir, "/", path),
|
||||||
fileLengthData.i(),
|
fileLengthData.i(),
|
||||||
offset, uris));
|
offset, uris));
|
||||||
fileEntries.push_back(fileEntry);
|
_fileEntries.push_back(fileEntry);
|
||||||
offset += fileEntry->getLength();
|
offset += fileEntry->getLength();
|
||||||
}
|
}
|
||||||
totalLength = length;
|
totalLength = length;
|
||||||
|
@ -245,7 +245,7 @@ void DefaultBtContext::extractFileEntries(const BDE& infoDict,
|
||||||
Util::joinPath(pathelems.begin(),
|
Util::joinPath(pathelems.begin(),
|
||||||
pathelems.end())),
|
pathelems.end())),
|
||||||
totalLength, 0, uris));
|
totalLength, 0, uris));
|
||||||
fileEntries.push_back(fileEntry);
|
_fileEntries.push_back(fileEntry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,10 +435,6 @@ BtContext::FILE_MODE DefaultBtContext::getFileMode() const {
|
||||||
return fileMode;
|
return fileMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileEntries DefaultBtContext::getFileEntries() const {
|
|
||||||
return fileEntries;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string& DefaultBtContext::getPieceHashAlgo() const
|
const std::string& DefaultBtContext::getPieceHashAlgo() const
|
||||||
{
|
{
|
||||||
return MessageDigestContext::SHA1;
|
return MessageDigestContext::SHA1;
|
||||||
|
@ -464,8 +460,8 @@ size_t DefaultBtContext::getNumPieces() const {
|
||||||
|
|
||||||
std::string DefaultBtContext::getActualBasePath() const
|
std::string DefaultBtContext::getActualBasePath() const
|
||||||
{
|
{
|
||||||
if(fileEntries.size() == 1) {
|
if(_fileEntries.size() == 1) {
|
||||||
return fileEntries.front()->getPath();
|
return _fileEntries.front()->getPath();
|
||||||
} else {
|
} else {
|
||||||
return strconcat(_dir, "/", name);
|
return strconcat(_dir, "/", name);
|
||||||
}
|
}
|
||||||
|
@ -552,8 +548,8 @@ void DefaultBtContext::setInfoHash(const unsigned char* infoHash)
|
||||||
void DefaultBtContext::setFilePathWithIndex
|
void DefaultBtContext::setFilePathWithIndex
|
||||||
(size_t index, const std::string& path)
|
(size_t index, const std::string& path)
|
||||||
{
|
{
|
||||||
if(0 < index && index <= fileEntries.size()) {
|
if(0 < index && index <= _fileEntries.size()) {
|
||||||
fileEntries[index-1]->setPath(path);
|
_fileEntries[index-1]->setPath(path);
|
||||||
} else {
|
} else {
|
||||||
throw DL_ABORT_EX(StringFormat("No such file with index=%u",
|
throw DL_ABORT_EX(StringFormat("No such file with index=%u",
|
||||||
static_cast<unsigned int>(index)).str());
|
static_cast<unsigned int>(index)).str());
|
||||||
|
@ -567,11 +563,11 @@ void DefaultBtContext::setFileFilter(IntSequence seq)
|
||||||
fileIndexes.erase(std::unique(fileIndexes.begin(), fileIndexes.end()),
|
fileIndexes.erase(std::unique(fileIndexes.begin(), fileIndexes.end()),
|
||||||
fileIndexes.end());
|
fileIndexes.end());
|
||||||
|
|
||||||
bool selectAll = fileIndexes.empty() || fileEntries.size() == 1;
|
bool selectAll = fileIndexes.empty() || _fileEntries.size() == 1;
|
||||||
|
|
||||||
int32_t index = 1;
|
int32_t index = 1;
|
||||||
for(std::deque<SharedHandle<FileEntry> >::const_iterator i =
|
for(std::deque<SharedHandle<FileEntry> >::const_iterator i =
|
||||||
fileEntries.begin(); i != fileEntries.end(); ++i, ++index) {
|
_fileEntries.begin(); i != _fileEntries.end(); ++i, ++index) {
|
||||||
(*i)->setRequested
|
(*i)->setRequested
|
||||||
(selectAll ||
|
(selectAll ||
|
||||||
std::binary_search(fileIndexes.begin(), fileIndexes.end(), index));
|
std::binary_search(fileIndexes.begin(), fileIndexes.end(), index));
|
||||||
|
|
|
@ -55,7 +55,6 @@ private:
|
||||||
unsigned char infoHash[INFO_HASH_LENGTH];
|
unsigned char infoHash[INFO_HASH_LENGTH];
|
||||||
std::string infoHashString;
|
std::string infoHashString;
|
||||||
std::deque<std::string> pieceHashes;
|
std::deque<std::string> pieceHashes;
|
||||||
std::deque<SharedHandle<FileEntry> > fileEntries;
|
|
||||||
FILE_MODE fileMode;
|
FILE_MODE fileMode;
|
||||||
uint64_t totalLength;
|
uint64_t totalLength;
|
||||||
size_t pieceLength;
|
size_t pieceLength;
|
||||||
|
@ -143,8 +142,6 @@ private:
|
||||||
|
|
||||||
virtual FILE_MODE getFileMode() const;
|
virtual FILE_MODE getFileMode() const;
|
||||||
|
|
||||||
virtual std::deque<SharedHandle<FileEntry> > getFileEntries() const;
|
|
||||||
|
|
||||||
virtual const std::string& getPieceHashAlgo() const;
|
virtual const std::string& getPieceHashAlgo() const;
|
||||||
|
|
||||||
virtual const std::deque<SharedHandle<AnnounceTier> >&
|
virtual const std::deque<SharedHandle<AnnounceTier> >&
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
*/
|
*/
|
||||||
/* copyright --> */
|
/* copyright --> */
|
||||||
#include "DownloadContext.h"
|
#include "DownloadContext.h"
|
||||||
|
#include "FileEntry.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
|
|
@ -51,8 +51,9 @@ class FileEntry;
|
||||||
class DownloadContext
|
class DownloadContext
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
std::string _dir;
|
std::deque<SharedHandle<FileEntry> > _fileEntries;
|
||||||
|
|
||||||
|
std::string _dir;
|
||||||
private:
|
private:
|
||||||
Time _downloadStartTime;
|
Time _downloadStartTime;
|
||||||
|
|
||||||
|
@ -79,7 +80,10 @@ public:
|
||||||
|
|
||||||
virtual FILE_MODE getFileMode() const = 0;
|
virtual FILE_MODE getFileMode() const = 0;
|
||||||
|
|
||||||
virtual std::deque<SharedHandle<FileEntry> > getFileEntries() const = 0;
|
const std::deque<SharedHandle<FileEntry> >& getFileEntries() const
|
||||||
|
{
|
||||||
|
return _fileEntries;
|
||||||
|
}
|
||||||
|
|
||||||
virtual size_t getPieceLength() const = 0;
|
virtual size_t getPieceLength() const = 0;
|
||||||
|
|
||||||
|
|
|
@ -44,22 +44,24 @@ SingleFileDownloadContext::SingleFileDownloadContext(size_t pieceLength,
|
||||||
const std::string& filename,
|
const std::string& filename,
|
||||||
const std::string& ufilename):
|
const std::string& ufilename):
|
||||||
_pieceLength(pieceLength),
|
_pieceLength(pieceLength),
|
||||||
_fileEntry(new FileEntry(filename, totalLength, 0)),
|
|
||||||
_filename(filename),
|
_filename(filename),
|
||||||
_ufilename(ufilename),
|
_ufilename(ufilename),
|
||||||
_knowsTotalLength(true)
|
_knowsTotalLength(true)
|
||||||
{
|
{
|
||||||
|
_fileEntries.push_back
|
||||||
|
(SharedHandle<FileEntry>(new FileEntry(filename, totalLength, 0)));
|
||||||
updateFileEntry();
|
updateFileEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleFileDownloadContext::updateFileEntry()
|
void SingleFileDownloadContext::updateFileEntry()
|
||||||
{
|
{
|
||||||
|
const SharedHandle<FileEntry>& fileEntry = _fileEntries.front();
|
||||||
if(!_ufilename.empty()) {
|
if(!_ufilename.empty()) {
|
||||||
_fileEntry->setPath(_ufilename);
|
fileEntry->setPath(_ufilename);
|
||||||
} else if(!_filename.empty()) {
|
} else if(!_filename.empty()) {
|
||||||
_fileEntry->setPath(_filename);
|
fileEntry->setPath(_filename);
|
||||||
} else {
|
} else {
|
||||||
_fileEntry->setPath("");
|
fileEntry->setPath("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +73,7 @@ SingleFileDownloadContext::getPieceHashes() const
|
||||||
|
|
||||||
uint64_t SingleFileDownloadContext::getTotalLength() const
|
uint64_t SingleFileDownloadContext::getTotalLength() const
|
||||||
{
|
{
|
||||||
return _fileEntry->getLength();
|
return _fileEntries.front()->getLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SingleFileDownloadContext::knowsTotalLength() const
|
bool SingleFileDownloadContext::knowsTotalLength() const
|
||||||
|
@ -79,27 +81,19 @@ bool SingleFileDownloadContext::knowsTotalLength() const
|
||||||
return _knowsTotalLength;
|
return _knowsTotalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileEntries
|
|
||||||
SingleFileDownloadContext::getFileEntries() const
|
|
||||||
{
|
|
||||||
FileEntries fs;
|
|
||||||
fs.push_back(_fileEntry);
|
|
||||||
return fs;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t SingleFileDownloadContext::getNumPieces() const
|
size_t SingleFileDownloadContext::getNumPieces() const
|
||||||
{
|
{
|
||||||
return (_fileEntry->getLength()+_pieceLength-1)/_pieceLength;
|
return (_fileEntries.front()->getLength()+_pieceLength-1)/_pieceLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string SingleFileDownloadContext::getActualBasePath() const
|
std::string SingleFileDownloadContext::getActualBasePath() const
|
||||||
{
|
{
|
||||||
return _fileEntry->getPath();
|
return _fileEntries.front()->getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleFileDownloadContext::setTotalLength(uint64_t totalLength)
|
void SingleFileDownloadContext::setTotalLength(uint64_t totalLength)
|
||||||
{
|
{
|
||||||
_fileEntry->setLength(totalLength);
|
_fileEntries.front()->setLength(totalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleFileDownloadContext::markTotalLengthIsUnknown()
|
void SingleFileDownloadContext::markTotalLengthIsUnknown()
|
||||||
|
|
|
@ -36,17 +36,18 @@
|
||||||
#define _D_SINGLE_FILE_DOWNLOAD_CONTEXT_H_
|
#define _D_SINGLE_FILE_DOWNLOAD_CONTEXT_H_
|
||||||
|
|
||||||
#include "DownloadContext.h"
|
#include "DownloadContext.h"
|
||||||
#include "A2STR.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
|
#include "A2STR.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
class SingleFileDownloadContext:public DownloadContext
|
class SingleFileDownloadContext:public DownloadContext
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
size_t _pieceLength;
|
size_t _pieceLength;
|
||||||
SharedHandle<FileEntry> _fileEntry;
|
|
||||||
/**
|
/**
|
||||||
* _filename and _ufilename may contains directory path name. So
|
* _filename and _ufilename may contains directory path name. So
|
||||||
* /usr/local/aria2c is acceptable here. These should be complete
|
* /usr/local/aria2c is acceptable here. These should be complete
|
||||||
|
@ -95,8 +96,6 @@ public:
|
||||||
return SINGLE;
|
return SINGLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual std::deque<SharedHandle<FileEntry> > getFileEntries() const;
|
|
||||||
|
|
||||||
virtual size_t getPieceLength() const
|
virtual size_t getPieceLength() const
|
||||||
{
|
{
|
||||||
return _pieceLength;
|
return _pieceLength;
|
||||||
|
|
Loading…
Reference in New Issue