/* */ #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(); } SharedHandle UnknownLengthPieceStorage::getMissingPiece(const SharedHandle& peer) { abort(); } SharedHandle UnknownLengthPieceStorage::getMissingPiece (const SharedHandle& peer, const std::deque& excludedIndexes) { abort(); } SharedHandle UnknownLengthPieceStorage::getMissingFastPiece(const SharedHandle& peer) { abort(); } SharedHandle UnknownLengthPieceStorage::getMissingFastPiece (const SharedHandle& peer, const std::deque& excludedIndexes) { abort(); } #endif // ENABLE_BITTORRENT bool UnknownLengthPieceStorage::hasMissingUnusedPiece() { abort(); } SharedHandle UnknownLengthPieceStorage::getSparseMissingUnusedPiece (const unsigned char* ignoreBitfield, size_t length) { if(_downloadFinished) { return SharedHandle(); } if(_piece.isNull()) { _piece.reset(new Piece()); return _piece; } else { return SharedHandle(); } } PieceHandle UnknownLengthPieceStorage::getMissingPiece(size_t index) { if(index == 0) { return getSparseMissingUnusedPiece(0, 0); } else { return SharedHandle(); } } PieceHandle UnknownLengthPieceStorage::getPiece(size_t index) { if(index == 0) { if(_piece.isNull()) { return SharedHandle(new Piece()); } else { return _piece; } } else { return SharedHandle(); } } void UnknownLengthPieceStorage::completePiece(const PieceHandle& piece) { if(_piece == piece) { _downloadFinished = true; _totalLength = _piece->getLength(); _diskAdaptor->setTotalLength(_totalLength); _piece.reset(); } } void UnknownLengthPieceStorage::cancelPiece(const PieceHandle& 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.isNull()) { 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.isNull()) { _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::deque >& pieces) {} void UnknownLengthPieceStorage::setDiskWriterFactory(const DiskWriterFactoryHandle& diskWriterFactory) { _diskWriterFactory = diskWriterFactory; } } // namespace aria2