/* */ #include "UnknownLengthPieceStorage.h" #include "DefaultDiskWriter.h" #include "DirectDiskAdaptor.h" #include "prefs.h" #include "DefaultDiskWriterFactory.h" #include "DownloadContext.h" #include "Piece.h" #include "FileEntry.h" #include namespace aria2 { UnknownLengthPieceStorage::UnknownLengthPieceStorage(const DownloadContextHandle& downloadContext, const Option* option): _downloadContext(downloadContext), _option(option), _diskWriterFactory(new DefaultDiskWriterFactory()), _totalLength(0), _downloadFinished(false) {} UnknownLengthPieceStorage::~UnknownLengthPieceStorage() {} void UnknownLengthPieceStorage::initStorage() { DiskWriterHandle writer = _diskWriterFactory->newDiskWriter(); DirectDiskAdaptorHandle directDiskAdaptor(new DirectDiskAdaptor()); directDiskAdaptor->setDiskWriter(writer); directDiskAdaptor->setTotalLength(_downloadContext->getTotalLength()); _diskAdaptor = directDiskAdaptor; std::string storeDir = _downloadContext->getDir(); // if(storeDir == "") { // storeDir = "."; // } _diskAdaptor->setStoreDir(storeDir); _diskAdaptor->setFileEntries(_downloadContext->getFileEntries()); } 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(); } PieceHandle UnknownLengthPieceStorage::getMissingPiece() { 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 getMissingPiece(); } 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