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-18 12:09:19 +0300
committerJimmy Wärting <jimmy@warting.se>2018-08-18 12:09:19 +0300
commit36d4e076bb050f21a58873d1abe5f8788fed11cc (patch)
tree8c03b8485ba08aefc3656141a20552a37891b59c /lib
parent56359b0c0542883d568927822b474584f5ce1457 (diff)
modernize lib/file.js
Diffstat (limited to 'lib')
-rw-r--r--lib/file.js198
1 files changed, 97 insertions, 101 deletions
diff --git a/lib/file.js b/lib/file.js
index eb2fc21..f9adb06 100644
--- a/lib/file.js
+++ b/lib/file.js
@@ -1,127 +1,123 @@
-module.exports = File
-
-var eos = require('end-of-stream')
-var EventEmitter = require('events').EventEmitter
-var FileStream = require('./file-stream')
-var inherits = require('inherits')
-var path = require('path')
-var render = require('render-media')
-var stream = require('readable-stream')
-var streamToBlob = require('stream-to-blob')
-var streamToBlobURL = require('stream-to-blob-url')
-var streamToBuffer = require('stream-with-known-length-to-buffer')
-
-inherits(File, EventEmitter)
-
-function File (torrent, file) {
- EventEmitter.call(this)
-
- this._torrent = torrent
- this._destroyed = false
-
- this.name = file.name
- this.path = file.path
- this.length = file.length
- this.offset = file.offset
-
- this.done = false
-
- var start = file.offset
- var end = start + file.length - 1
-
- this._startPiece = start / this._torrent.pieceLength | 0
- this._endPiece = end / this._torrent.pieceLength | 0
-
- if (this.length === 0) {
- this.done = true
- this.emit('done')
+const eos = require('end-of-stream')
+const {EventEmitter} = require('events')
+const FileStream = require('./file-stream')
+const path = require('path')
+const render = require('render-media')
+const stream = require('readable-stream')
+const streamToBlob = require('stream-to-blob')
+const streamToBlobURL = require('stream-to-blob-url')
+const streamToBuffer = require('stream-with-known-length-to-buffer')
+
+class File extends EventEmitter {
+ constructor (torrent, file) {
+ super()
+
+ this._torrent = torrent
+ this._destroyed = false
+
+ this.name = file.name
+ this.path = file.path
+ this.length = file.length
+ this.offset = file.offset
+
+ this.done = false
+
+ const start = file.offset
+ const end = start + file.length - 1
+
+ this._startPiece = start / this._torrent.pieceLength | 0
+ this._endPiece = end / this._torrent.pieceLength | 0
+
+ if (this.length === 0) {
+ this.done = true
+ this.emit('done')
+ }
}
-}
-Object.defineProperty(File.prototype, 'downloaded', {
- get: function () {
+ get downloaded () {
if (!this._torrent.bitfield) return 0
- var downloaded = 0
- for (var index = this._startPiece; index <= this._endPiece; ++index) {
+ let downloaded = 0
+ for (let index = this._startPiece; index <= this._endPiece; ++index) {
if (this._torrent.bitfield.get(index)) {
// verified data
- downloaded += (index === this._endPiece) ? this._torrent.lastPieceLength : this._torrent.pieceLength
+ downloaded += index === this._endPiece ? this._torrent.lastPieceLength : this._torrent.pieceLength
} else {
// "in progress" data
- var piece = this._torrent.pieces[index]
- downloaded += (piece.length - piece.missing)
+ const piece = this._torrent.pieces[index]
+ downloaded += piece.length - piece.missing
}
}
return downloaded
}
-})
-Object.defineProperty(File.prototype, 'progress', {
- get: function () { return this.length ? this.downloaded / this.length : 0 }
-})
+ get progress () {
+ return this.length ? this.downloaded / this.length : 0
+ }
-File.prototype.select = function (priority) {
- if (this.length === 0) return
- this._torrent.select(this._startPiece, this._endPiece, priority)
-}
+ select (priority) {
+ if (this.length === 0) return
+ this._torrent.select(this._startPiece, this._endPiece, priority)
+ }
-File.prototype.deselect = function () {
- if (this.length === 0) return
- this._torrent.deselect(this._startPiece, this._endPiece, false)
-}
+ deselect () {
+ if (this.length === 0) return
+ this._torrent.deselect(this._startPiece, this._endPiece, false)
+ }
+
+ createReadStream (opts) {
+ if (this.length === 0) {
+ const empty = new stream.PassThrough()
+ process.nextTick(() => {
+ empty.end()
+ })
+ return empty
+ }
-File.prototype.createReadStream = function (opts) {
- var self = this
- if (this.length === 0) {
- var empty = new stream.PassThrough()
- process.nextTick(function () {
- empty.end()
+ const fileStream = new FileStream(this, opts)
+ this._torrent.select(fileStream._startPiece, fileStream._endPiece, true, () => {
+ fileStream._notify()
})
- return empty
+ eos(fileStream, () => {
+ if (this._destroyed) return
+ if (!this._torrent.destroyed) {
+ this._torrent.deselect(fileStream._startPiece, fileStream._endPiece, true)
+ }
+ })
+ return fileStream
}
- var fileStream = new FileStream(self, opts)
- self._torrent.select(fileStream._startPiece, fileStream._endPiece, true, function () {
- fileStream._notify()
- })
- eos(fileStream, function () {
- if (self._destroyed) return
- if (!self._torrent.destroyed) {
- self._torrent.deselect(fileStream._startPiece, fileStream._endPiece, true)
- }
- })
- return fileStream
-}
+ getBuffer (cb) {
+ streamToBuffer(this.createReadStream(), this.length, cb)
+ }
-File.prototype.getBuffer = function (cb) {
- streamToBuffer(this.createReadStream(), this.length, cb)
-}
+ getBlob (cb) {
+ if (typeof window === 'undefined') throw new Error('browser-only method')
+ streamToBlob(this.createReadStream(), this._getMimeType(), cb)
+ }
-File.prototype.getBlob = function (cb) {
- if (typeof window === 'undefined') throw new Error('browser-only method')
- streamToBlob(this.createReadStream(), this._getMimeType(), cb)
-}
+ getBlobURL (cb) {
+ if (typeof window === 'undefined') throw new Error('browser-only method')
+ streamToBlobURL(this.createReadStream(), this._getMimeType(), cb)
+ }
-File.prototype.getBlobURL = function (cb) {
- if (typeof window === 'undefined') throw new Error('browser-only method')
- streamToBlobURL(this.createReadStream(), this._getMimeType(), cb)
-}
+ appendTo (elem, opts, cb) {
+ if (typeof window === 'undefined') throw new Error('browser-only method')
+ render.append(this, elem, opts, cb)
+ }
-File.prototype.appendTo = function (elem, opts, cb) {
- if (typeof window === 'undefined') throw new Error('browser-only method')
- render.append(this, elem, opts, cb)
-}
+ renderTo (elem, opts, cb) {
+ if (typeof window === 'undefined') throw new Error('browser-only method')
+ render.render(this, elem, opts, cb)
+ }
-File.prototype.renderTo = function (elem, opts, cb) {
- if (typeof window === 'undefined') throw new Error('browser-only method')
- render.render(this, elem, opts, cb)
-}
+ _getMimeType () {
+ return render.mime[path.extname(this.name).toLowerCase()]
+ }
-File.prototype._getMimeType = function () {
- return render.mime[path.extname(this.name).toLowerCase()]
+ _destroy () {
+ this._destroyed = true
+ this._torrent = null
+ }
}
-File.prototype._destroy = function () {
- this._destroyed = true
- this._torrent = null
-}
+module.exports = File