Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/webtorrent/webtorrent.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJimmy Wärting <jimmy@warting.se>2018-08-19 16:17:14 +0300
committerJimmy Wärting <jimmy@warting.se>2018-08-19 16:17:14 +0300
commit84a69f7d5d921c417d8ed9e96615d5de3d23a060 (patch)
treebe85cf7eee69628b6f7a90855fe36b71eae58df5 /lib
parent6386a6e75d260929098f68ccdc59603554e6bc3b (diff)
no message
Diffstat (limited to 'lib')
-rw-r--r--lib/file.js24
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 () {