/* */ #include "UnknownLengthPieceStorage.h" #include #include "DefaultDiskWriter.h" #include "DirectDiskAdaptor.h" #include "prefs.h" #include "DefaultDiskWriterFactory.h" #include "DownloadContext.h" #include "Piece.h" #include "FileEntry.h" namespace aria2 { UnknownLengthPieceStorage::UnknownLengthPieceStorage (const SharedHandle& downloadContext, const Option* option): downloadContext_(downloadContext), option_(option), diskWriterFactory_(new DefaultDiskWriterFactory()), totalLength_(0), downloadFinished_(false) {} UnknownLengthPieceStorage::~UnknownLengthPieceStorage() {} void UnknownLengthPieceStorage::initStorage() { DirectDiskAdaptorHandle directDiskAdaptor(new DirectDiskAdaptor()); directDiskAdaptor->setTotalLength(downloadContext_->getTotalLength()); directDiskAdaptor->setFileEntries(downloadContext_->getFileEntries().begin(), downloadContext_->getFileEntries().end()); DiskWriterHandle writer = diskWriterFactory_->newDiskWriter(directDiskAdaptor->getFilePath()); directDiskAdaptor->setDiskWriter(writer); diskAdaptor_ = directDiskAdaptor; } #ifdef ENABLE_BITTORRENT bool UnknownLengthPieceStorage::hasMissingPiece(const SharedHandle& peer) { abort(); } void UnknownLengthPieceStorage::getMissingPiece (std::vector >& pieces, size_t minMissingBlocks, const SharedHandle& peer) { abort(); } void UnknownLengthPieceStorage::getMissingPiece (std::vector >& pieces, size_t minMissingBlocks, const SharedHandle& peer, const std::vector& excludedIndexes) { abort(); } void UnknownLengthPieceStorage::getMissingFastPiece (std::vector >& pieces, size_t minMissingBlocks, const SharedHandle& peer) { abort(); } void UnknownLengthPieceStorage::getMissingFastPiece (std::vector >& pieces, size_t minMissingBlocks, const SharedHandle& peer, const std::vector& excludedIndexes) { abort(); } SharedHandle UnknownLengthPieceStorage::getMissingPiece(const SharedHandle& peer) { abort(); } SharedHandle UnknownLengthPieceStorage::getMissingPiece (const SharedHandle& peer, const std::vector& excludedIndexes) { abort(); } #endif // ENABLE_BITTORRENT bool UnknownLengthPieceStorage::hasMissingUnusedPiece() { abort(); } SharedHandle UnknownLengthPieceStorage::getSparseMissingUnusedPiece (size_t minSplitSize, const unsigned char* ignoreBitfield, size_t length) { if(downloadFinished_) { return SharedHandle(); } if(!piece_) { piece_.reset(new Piece()); return piece_; } else { return SharedHandle(); } } SharedHandle UnknownLengthPieceStorage::getMissingPiece(size_t index) { if(index == 0) { return getSparseMissingUnusedPiece(0, 0, 0); } else { return SharedHandle(); } } SharedHandle UnknownLengthPieceStorage::getPiece(size_t index) { if(index == 0) { if(!piece_) { return SharedHandle(new Piece()); } else { return piece_; } } else { return SharedHandle(); } } void UnknownLengthPieceStorage::completePiece(const SharedHandle& piece) { if(*piece_ == *piece) { downloadFinished_ = true; totalLength_ = piece_->getLength(); diskAdaptor_->setTotalLength(totalLength_); piece_.reset(); } } void UnknownLengthPieceStorage::cancelPiece(const SharedHandle& piece) { if(*piece_ == *piece) { piece_.reset(); } } bool UnknownLengthPieceStorage::hasPiece(size_t index) { if(index == 0 && downloadFinished_) { return true; } else { return false; } } bool UnknownLengthPieceStorage::isPieceUsed(size_t index) { if(index == 0 && piece_) { return true; } else { return false; } } DiskAdaptorHandle UnknownLengthPieceStorage::getDiskAdaptor() { return diskAdaptor_; } size_t UnknownLengthPieceStorage::getPieceLength(size_t index) { if(index == 0) { return totalLength_; } else { return 0; } } void UnknownLengthPieceStorage::markAllPiecesDone() { if(piece_) { totalLength_ = piece_->getLength(); piece_.reset(); } downloadFinished_ = true; } void UnknownLengthPieceStorage::markPiecesDone(uint64_t length) { // TODO not implemented yet abort(); } void UnknownLengthPieceStorage::markPieceMissing(size_t index) { // TODO not implemented yet abort(); } void UnknownLengthPieceStorage::getInFlightPieces (std::vector >& pieces) {} void UnknownLengthPieceStorage::setDiskWriterFactory (const DiskWriterFactoryHandle& diskWriterFactory) { diskWriterFactory_ = diskWriterFactory; } } // namespace aria2