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:
authorDiego Rodríguez Baquero <diegorbaquero@gmail.com>2018-08-24 18:09:07 +0300
committerGitHub <noreply@github.com>2018-08-24 18:09:07 +0300
commita57e9f3e9d4f3f4e0d92506fe1fd75df35cf9055 (patch)
tree6b0c558ded2d9dd4312ebeb8052925f785abea1d /lib
parent92ec1a249d5374178557d80c1fc013ff2c76440d (diff)
parentbaed9c5ba70db2d37ba9d326c885c2082633a9f0 (diff)
Merge pull request #1479 from jimmywarting/feature/file_downloaded
calculate file downloaded correctly
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..2715fbb 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 () {