diff options
author | Jimmy Wärting <jimmy@warting.se> | 2018-08-19 16:17:14 +0300 |
---|---|---|
committer | Jimmy Wärting <jimmy@warting.se> | 2018-08-19 16:17:14 +0300 |
commit | 84a69f7d5d921c417d8ed9e96615d5de3d23a060 (patch) | |
tree | be85cf7eee69628b6f7a90855fe36b71eae58df5 /lib | |
parent | 6386a6e75d260929098f68ccdc59603554e6bc3b (diff) |
no message
Diffstat (limited to 'lib')
-rw-r--r-- | lib/file.js | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/file.js b/lib/file.js index 4d7d71a..23a6576 100644 --- a/lib/file.js +++ b/lib/file.js @@ -36,18 +36,30 @@ class File extends EventEmitter { get downloaded () { if (!this._torrent.bitfield) return 0 - let downloaded = 0 - for (let index = this._startPiece; index <= this._endPiece; ++index) { - if (this._torrent.bitfield.get(index)) { + + const { pieces, bitfield, pieceLength } = this._torrent + const { _startPiece:start, _endPiece:end } = this + const piece = pieces[start] + + // Calculate first piece diffrently, it sometimes have a offset + let downloaded = bitfield.get(start) + ? pieceLength - this.offset + : Math.max(piece.length - piece.missing - this.offset, 0) + + for (let index = start + 1; index <= end; ++index) { + if (bitfield.get(index)) { // verified data - downloaded += (index === this._endPiece) ? this._torrent.lastPieceLength : this._torrent.pieceLength + downloaded += pieceLength } else { // "in progress" data - const piece = this._torrent.pieces[index] + const piece = pieces[index] downloaded += piece.length - piece.missing } } - return downloaded + + // We don't have a end-offset and one small file can fith in the middle + // of one chunk, so return this.length if it's oversized + return Math.min(downloaded, this.length) } get progress () { |