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:
authorBrad Marsden <silentbot1@gmail.com>2018-05-18 17:43:36 +0300
committerGitHub <noreply@github.com>2018-05-18 17:43:36 +0300
commit925bb881cfe90cc055f67e747df693f32d265733 (patch)
tree8230e6b63efc51ecde5af0c513f0530c3ba84885 /lib
parent9179aa7be776d83089f27d8247d0b26244a342d8 (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.js20
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) {