diff --git a/ChangeLog b/ChangeLog index 77182704..60de64d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-07-04 Tatsuhiro Tsujikawa + + In a single file download, file size becomes known just after + downloading, set total length to FileEntry object when download + completed. + * src/DownloadCommand.cc + 2009-07-04 Tatsuhiro Tsujikawa Use std::vector::reserve() for fileEntries and pieceHashes in diff --git a/src/DownloadCommand.cc b/src/DownloadCommand.cc index c72ca3fc..7652b531 100644 --- a/src/DownloadCommand.cc +++ b/src/DownloadCommand.cc @@ -260,6 +260,17 @@ void DownloadCommand::checkLowestDownloadSpeed() const bool DownloadCommand::prepareForNextSegment() { if(_requestGroup->downloadFinished()) { + // If this is a single file download, and file size becomes known + // just after downloading, set total length to FileEntry object + // here. + if(_requestGroup->getDownloadContext()->getFileEntries().size() == 1) { + const SharedHandle& fileEntry = + _requestGroup->getDownloadContext()->getFirstFileEntry(); + if(fileEntry->getLength() == 0) { + fileEntry->setLength + (_requestGroup->getPieceStorage()->getCompletedLength()); + } + } #ifdef ENABLE_MESSAGE_DIGEST CheckIntegrityEntryHandle entry(new ChecksumCheckIntegrityEntry(_requestGroup)); if(entry->isValidationReady()) {