diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-04-16 14:38:19 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-04-16 14:38:19 +0000 |
| commit | 2a84b9de43c759fb93aa7a0bb2d22d4b5f37af4e (patch) | |
| tree | 8d12afe1fe42fb6903b900f1a4e3080f6bc2fcd1 /src/MultiDiskWriter.cc | |
| parent | 58633887e90b26c89dcf871dfa4873b73f4c5f6a (diff) | |
2006-04-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TorrentConsoleDownloadEngine.cc
(onPartialDownloadingCompletes): Renamed as
onSelectiveDownloadingCompletes.
(onSelectiveDownloadingCompletes): Updated message.
To add DiskAdaptor which abstract DiskWriter family:
* src/PeerConnection.cc: Use diskAdaptor instead of diskWriter.
* src/PeerInteractionCommand.cc: Use diskAdaptor instead of
diskWriter.
* src/BitfieldMan.cc (isAllBitSet): bug fix.
* src/TorrentMan.cc : Included CopyDiskAdaptor.h,
DirectDiskAdaptor.h,
MultiDiskAdaptor.h.
(readFileEntry): Changed its arguments.
(setup): setupDiskWriter is merged into this function.
(setupDiskWriter): Removed.
(setFileFilter): New function.
(readFileEntryFromMetaInfoFile): Updated according to the
changes
made in readFileEntry.
(getFilePath): Removed.
(getTempFilePath): Removed.
(getSegmentFilePath): Updated due to the removal of getFilePath.
(fixFilename): Removed.
(copySingleFile): Removed.
(splitMultiFile): Removed.
(deleteTempFile): Removed.
(setFileEntriesToDownload): Removed.
(isPartialDownloadingMode): Renamed as
isSelectiveDownloadingMode.
(isSelectiveDownloadingMode): New function.
(setAllMultiFileRequestedState): Removed.
(finishPartialDownloadingMode): Renamed as
finishSelectiveDownloadingMode.
(finishSelectiveDownloadingMode): New function.
(getPartialTotalLength): Renamed as getSelectedTotalLength.
(getSelectedTotalLength): New function.
(onDownloadComplete): Use diskAdaptor.
* src/MultiDiskWriter.cc (Constructor): Added the argument
pieceLength
(Range): Removed.
(setMultiFileEntries): Renamed as setFileEntries.
(setFileEntries): New function.
* src/MultiDiskWriter.h [DiskWriterEntry](enabled): Removed.
(pieceLength): New variable.
* src/main.cc (printDownloadCompeleteMessage): New function.
(torrentHandler): Use diskAdaptor instead of diskWriter.
(main): Renamed torrent-show-files to show-files.
Rewritten file contents listing.
* src/TorrentMan.h (FileEntry): Removed.
(multiFileTopDir): Removed.
(multiFileEntries): Removed.
(diskWriter): Removed.
(diskAdaptor): New variable.
* src/DefaultDiskWriter.h (totalLength): New variable.
* src/DefaultDiskWriter.cc (initAndOpenFile): Added ftruncate.
* src/TorrentDownloadEngine.cc (onEndOfRun): Use diskAdaptor
instead of
diskWriter.
* src/TorrentConsoleDownloadEngine.h
(partialDownloadLengthDiff): Renamed as
selectedDownloadLengthDiff.
(partialTotalLength): Renamed as selectedTotalLength.
* src/AbstractDiskWriter.cc (openFile): If file exists, call
openExistingFile, otherwise call initAndOpenFile.
(closeFile): fd > 0, not fd != 0.
* src/prefs.h (PREF_TORRENT_SHOW_FILES): Renamed as
PREF_SHOW_FILES
(PREF_SHOW_FILES): New definition.
Diffstat (limited to 'src/MultiDiskWriter.cc')
| -rw-r--r-- | src/MultiDiskWriter.cc | 70 |
1 files changed, 9 insertions, 61 deletions
diff --git a/src/MultiDiskWriter.cc b/src/MultiDiskWriter.cc index 7172b809..922eed8e 100644 --- a/src/MultiDiskWriter.cc +++ b/src/MultiDiskWriter.cc @@ -24,7 +24,7 @@ #include "Util.h" #include <errno.h> -MultiDiskWriter::MultiDiskWriter() { +MultiDiskWriter::MultiDiskWriter(int pieceLength):pieceLength(pieceLength) { #ifdef ENABLE_SHA1DIGEST sha1DigestInit(ctx); #endif // ENABLE_SHA1DIGEST @@ -37,63 +37,26 @@ MultiDiskWriter::~MultiDiskWriter() { #endif // ENABLE_SHA1DIGEST } -typedef struct { - long long int blockOffset; - long long int length; -} Range; - -typedef deque<Range> Ranges; - void MultiDiskWriter::clearEntries() { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end(); itr++) { - if((*itr)->enabled) { - (*itr)->diskWriter->closeFile(); - } delete *itr; } diskWriterEntries.clear(); } -void MultiDiskWriter::setMultiFileEntries(const MultiFileEntries& multiFileEntries, int pieceLength) { +void MultiDiskWriter::setFileEntries(const FileEntries& fileEntries) { clearEntries(); - Ranges ranges; - for(MultiFileEntries::const_iterator itr = multiFileEntries.begin(); - itr != multiFileEntries.end(); itr++) { - if(itr->requested) { - Range range; - range.blockOffset = (itr->offset/pieceLength)*pieceLength; - range.length = ((itr->offset+itr->length)/pieceLength+ - ((itr->offset+itr->length)%pieceLength ? 1 : 0))*pieceLength-range.blockOffset; - ranges.push_back(range); - } - } - Ranges::const_iterator ritr = ranges.begin(); - for(MultiFileEntries::const_iterator itr = multiFileEntries.begin(); - itr != multiFileEntries.end(); itr++) { - DiskWriterEntry* entry; - if(ritr != ranges.end() && - // !(ritr->blockOffset+ritr->length-1 < itr->offset || - // itr->offset+itr->length-1 < ritr->blockOffset)) { - itr->offset < ritr->blockOffset+ritr->length && - ritr->blockOffset < itr->offset+itr->length) { - - entry = new DiskWriterEntry(*itr, true); - for(;ritr->blockOffset+ritr->length <= itr->offset+itr->length && - ritr != ranges.end(); ritr++); - } else { - entry = new DiskWriterEntry(*itr, false); - } - diskWriterEntries.push_back(entry); + for(FileEntries::const_iterator itr = fileEntries.begin(); + itr != fileEntries.end(); itr++) { + diskWriterEntries.push_back(new DiskWriterEntry(*itr)); } } void MultiDiskWriter::openFile(const string& filename) { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end(); itr++) { - if((*itr)->enabled) { - (*itr)->diskWriter->openFile(filename+"/"+(*itr)->fileEntry.path); - } + (*itr)->diskWriter->openFile(filename+"/"+(*itr)->fileEntry.path); } } @@ -101,27 +64,21 @@ void MultiDiskWriter::openFile(const string& filename) { void MultiDiskWriter::initAndOpenFile(string filename) { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end(); itr++) { - if((*itr)->enabled) { - (*itr)->diskWriter->initAndOpenFile(filename+"/"+(*itr)->fileEntry.path); - } + (*itr)->diskWriter->initAndOpenFile(filename+"/"+(*itr)->fileEntry.path); } } void MultiDiskWriter::closeFile() { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end(); itr++) { - if((*itr)->enabled) { - (*itr)->diskWriter->closeFile(); - } + (*itr)->diskWriter->closeFile(); } } void MultiDiskWriter::openExistingFile(string filename) { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end(); itr++) { - if((*itr)->enabled) { - (*itr)->diskWriter->openExistingFile(filename+"/"+(*itr)->fileEntry.path); - } + (*itr)->diskWriter->openExistingFile(filename+"/"+(*itr)->fileEntry.path); } } @@ -133,9 +90,6 @@ void MultiDiskWriter::writeData(const char* data, int len, long long int positio for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end() && rem != 0; itr++) { if(isInRange(*itr, offset) || writing) { - if(!(*itr)->enabled) { - throw new DlAbortEx("invalid offset or length. offset = %lld", offset); - } int writeLength = calculateLength(*itr, fileOffset, rem); (*itr)->diskWriter->writeData(data+(len-rem), writeLength, fileOffset); rem -= writeLength; @@ -174,9 +128,6 @@ int MultiDiskWriter::readData(char* data, int len, long long int position) { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end() && rem != 0; itr++) { if(isInRange(*itr, offset) || reading) { - if(!(*itr)->enabled) { - throw new DlAbortEx("invalid offset or length. offset = %lld", offset); - } int readLength = calculateLength((*itr), fileOffset, rem); totalReadLength += (*itr)->diskWriter->readData(data+(len-rem), readLength, fileOffset); rem -= readLength; @@ -223,9 +174,6 @@ string MultiDiskWriter::sha1Sum(long long int offset, long long int length) { for(DiskWriterEntries::iterator itr = diskWriterEntries.begin(); itr != diskWriterEntries.end() && rem != 0; itr++) { if(isInRange(*itr, offset) || reading) { - if(!(*itr)->enabled) { - throw new DlAbortEx("invalid offset or length. offset = %lld", offset); - } int readLength = calculateLength((*itr), fileOffset, rem); hashUpdate(*itr, fileOffset, readLength); rem -= readLength; |
