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:
authorJohn Hiesey <john@hiesey.com>2019-03-20 02:17:14 +0300
committerJohn Hiesey <john@hiesey.com>2019-07-09 05:13:08 +0300
commitae8988848f4328727b321079922a2a5ed735d6ec (patch)
tree7ad865e69489530b2cbc721362c1c57cd2c2e8e5 /lib
parente4b10c20de13b88300a875d6c79a917cfb16c31c (diff)
Add torrent.rescanFiles() to allow manual verify
Useful if files are modified externally to webtorrent.
Diffstat (limited to 'lib')
-rw-r--r--lib/torrent.js33
1 files changed, 25 insertions, 8 deletions
diff --git a/lib/torrent.js b/lib/torrent.js
index 8f667ff..14b2caf 100644
--- a/lib/torrent.js
+++ b/lib/torrent.js
@@ -505,6 +505,12 @@ class Torrent extends EventEmitter {
this._markAllVerified()
this._onStore()
} else {
+ const onPiecesVerified = (err) => {
+ if (err) return this._destroy(err)
+ this._debug('done verifying')
+ this._onStore()
+ }
+
this._debug('verifying existing torrent data')
if (this._fileModtimes && this._store === FSChunkStore) {
// don't verify if the files haven't been modified since we last checked
@@ -517,11 +523,11 @@ class Torrent extends EventEmitter {
this._markAllVerified()
this._onStore()
} else {
- this._verifyPieces()
+ this._verifyPieces(onPiecesVerified)
}
})
} else {
- this._verifyPieces()
+ this._verifyPieces(onPiecesVerified)
}
}
@@ -547,8 +553,8 @@ class Torrent extends EventEmitter {
})
}
- _verifyPieces () {
- parallelLimit(this.pieces.map((_, index) => cb => {
+ _verifyPieces (cb) {
+ parallelLimit(this.pieces.map((piece, index) => cb => {
if (this.destroyed) return cb(new Error('torrent is destroyed'))
this.store.get(index, (err, buf) => {
@@ -568,10 +574,21 @@ class Torrent extends EventEmitter {
cb(null)
})
})
- }), FILESYSTEM_CONCURRENCY, err => {
- if (err) return this._destroy(err)
- this._debug('done verifying')
- this._onStore()
+ }), FILESYSTEM_CONCURRENCY, cb)
+ }
+
+ rescanFiles (cb) {
+ if (this.destroyed) throw new Error('torrent is destroyed')
+ if (!cb) cb = noop
+
+ this._verifyPieces((err) => {
+ if (err) {
+ this._destroy(err)
+ return cb(err)
+ }
+
+ this._checkDone()
+ cb(null)
})
}