diff options
author | Brad Marsden <silentbot1@gmail.com> | 2018-05-18 17:43:36 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-18 17:43:36 +0300 |
commit | 925bb881cfe90cc055f67e747df693f32d265733 (patch) | |
tree | 8230e6b63efc51ecde5af0c513f0530c3ba84885 /lib | |
parent | 9179aa7be776d83089f27d8247d0b26244a342d8 (diff) |
Implements BEP53 to allow file selection using &so in magnetURIs (#1396)
* Implements BEP53 to allow file selection using &so in magnetURI.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/torrent.js | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/torrent.js b/lib/torrent.js index c0e8aaf..6d53ee9 100644 --- a/lib/torrent.js +++ b/lib/torrent.js @@ -30,6 +30,7 @@ var speedometer = require('speedometer') var uniq = require('uniq') var utMetadata = require('ut_metadata') var utPex = require('ut_pex') // browser exclude +var parseRange = require('parse-numeric-range') var File = require('./file') var Peer = require('./peer') @@ -482,11 +483,6 @@ Torrent.prototype._onMetadata = function (metadata) { }) } - // start off selecting the entire torrent with low priority - if (self.pieces.length !== 0) { - self.select(0, self.pieces.length - 1, false) - } - self._rarityMap = new RarityMap(self) self.store = new ImmediateChunkStore( @@ -509,6 +505,20 @@ Torrent.prototype._onMetadata = function (metadata) { return new File(self, file) }) + // Select only specified files (BEP53) http://www.bittorrent.org/beps/bep_0053.html + if (self.so) { + var selectOnlyFiles = parseRange.parse(self.so) + + self.files.forEach(function (v, i) { + if (selectOnlyFiles.includes(i)) self.files[i].select(true) + }) + } else { + // start off selecting the entire torrent with low priority + if (self.pieces.length !== 0) { + self.select(0, self.pieces.length - 1, false) + } + } + self._hashes = self.pieces self.pieces = self.pieces.map(function (hash, i) { |