/* */ #ifndef _D_SINGLE_FILE_DOWNLOAD_CONTEXT_H_ #define _D_SINGLE_FILE_DOWNLOAD_CONTEXT_H_ #include "DownloadContext.h" #include #include namespace aria2 { class SingleFileDownloadContext:public DownloadContext { private: size_t _pieceLength; /** * Actual file path is _dir + _filename. * If _ufilename is not zero-length string, then _dir + _ufilename. */ SharedHandle _fileEntry; /** * _filename and _ufilename may contains directory path name. * So usr/local/aria2c is acceptable here. */ std::string _filename; std::string _ufilename; std::string _contentType; std::deque _pieceHashes; std::string _pieceHashAlgo; std::string _checksum; std::string _checksumHashAlgo; void updateFileEntry(); public: SingleFileDownloadContext(size_t pieceLength, uint64_t totalLength, const std::string& filename, const std::string& ufilename = ""); virtual ~SingleFileDownloadContext() {} virtual std::string getPieceHash(size_t index) const { if(index < _pieceHashes.size()) { return _pieceHashes[index]; } else { return ""; } } virtual const std::deque& getPieceHashes() const; virtual uint64_t getTotalLength() const; virtual FILE_MODE getFileMode() const { return SINGLE; } virtual std::deque > getFileEntries() const; virtual std::string getName() const { return _filename; } virtual size_t getPieceLength() const { return _pieceLength; } virtual size_t getNumPieces() const; virtual std::string getActualBasePath() const; virtual std::string getPieceHashAlgo() const { return _pieceHashAlgo; } const std::string& getChecksumHashAlgo() const { return _checksumHashAlgo; } const std::string& getChecksum() const { return _checksum; } void setPieceHashes(const std::deque& pieceHashes) { _pieceHashes = pieceHashes; } void setChecksumHashAlgo(const std::string& algo) { _checksumHashAlgo = algo; } void setChecksum(const std::string& checksum) { _checksum = checksum; } void setFilename(const std::string& filename) { _filename = filename; updateFileEntry(); } void setUFilename(const std::string& ufilename) { _ufilename = ufilename; updateFileEntry(); } void setTotalLength(uint64_t totalLength); void setPieceHashAlgo(const std::string& algo) { _pieceHashAlgo = algo; } void setContentType(const std::string& contentType) { _contentType = contentType; } const std::string& getContentType() { return _contentType; } }; typedef SharedHandle SingleFileDownloadContextHandle; } // namespace aria2 #endif // _D_SINGLE_FILE_DOWNLOAD_CONTEXT_H_