/* */ #include "UnknownLengthPieceStorage.h" #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 DownloadContextHandle& downloadContext, const Option* option): _downloadContext(downloadContext), _option(option), _diskAdaptor(0), _diskWriterFactory(new DefaultDiskWriterFactory()), _totalLength(0), _downloadFinished(false), _piece(0) {} 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()); } PieceHandle UnknownLengthPieceStorage::getMissingPiece() { if(_downloadFinished) { return 0; } if(_piece.isNull()) { _piece = new Piece(); return _piece; } else { return 0; } } PieceHandle UnknownLengthPieceStorage::getMissingPiece(int32_t index) { if(index == 0) { return getMissingPiece(); } else { return 0; } } PieceHandle UnknownLengthPieceStorage::getPiece(int32_t index) { if(index == 0) { if(_piece.isNull()) { return new Piece(); } else { return _piece; } } else { return 0; } } void UnknownLengthPieceStorage::completePiece(const PieceHandle& piece) { if(_piece == piece) { _downloadFinished = true; _totalLength = _piece->getLength(); _diskAdaptor->setTotalLength(_totalLength); _piece = 0; } } void UnknownLengthPieceStorage::cancelPiece(const PieceHandle& piece) { if(_piece == piece) { _piece = 0; } } bool UnknownLengthPieceStorage::hasPiece(int32_t index) { if(index == 0 && _downloadFinished) { return true; } else { return false; } } bool UnknownLengthPieceStorage::isPieceUsed(int32_t index) { if(index == 0 && !_piece.isNull()) { return true; } else { return false; } } DiskAdaptorHandle UnknownLengthPieceStorage::getDiskAdaptor() { return _diskAdaptor; } int32_t UnknownLengthPieceStorage::getPieceLength(int32_t index) { if(index == 0) { return _totalLength; } else { return 0; } } void UnknownLengthPieceStorage::markAllPiecesDone() { if(!_piece.isNull()) { _totalLength = _piece->getLength(); _piece = 0; } _downloadFinished = true; } Pieces UnknownLengthPieceStorage::getInFlightPieces() { return Pieces(); } void UnknownLengthPieceStorage::setDiskWriterFactory(const DiskWriterFactoryHandle& diskWriterFactory) { _diskWriterFactory = diskWriterFactory; } } // namespace aria2