Style: no more var

This commit is contained in:
DC
2016-08-31 14:36:11 -07:00
parent 0bda5358bd
commit 3f6cc97a02
54 changed files with 676 additions and 679 deletions

View File

@@ -17,14 +17,14 @@ function captureVideoFrame (video, format) {
throw new Error('Second argument must be one of "png", "jpg", or "webp"')
}
var canvas = document.createElement('canvas')
const canvas = document.createElement('canvas')
canvas.width = video.videoWidth
canvas.height = video.videoHeight
canvas.getContext('2d').drawImage(video, 0, 0)
var dataUri = canvas.toDataURL('image/' + format)
var data = dataUri.split(',')[1]
const dataUri = canvas.toDataURL('image/' + format)
const data = dataUri.split(',')[1]
return new Buffer(data, 'base64')
}

View File

@@ -13,19 +13,19 @@ module.exports = {
setRate
}
// Lazy load these for a ~300ms improvement in startup time
var airplayer, chromecasts, dlnacasts
const config = require('../../config')
var config = require('../../config')
// Lazy load these for a ~300ms improvement in startup time
let airplayer, chromecasts, dlnacasts
// App state. Cast modifies state.playing and state.errors in response to events
var state
let state
// Callback to notify module users when state has changed
var update
let update
// setInterval() for updating cast status
var statusInterval = null
let statusInterval = null
// Start looking for cast devices on the local network
function init (appState, callback) {
@@ -59,7 +59,7 @@ function init (appState, callback) {
// chromecast player implementation
function chromecastPlayer () {
var ret = {
const ret = {
device: null,
addDevice,
getDevices,
@@ -95,7 +95,7 @@ function chromecastPlayer () {
}
function open () {
var torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
const torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, {
type: 'video/mp4',
title: config.APP_NAME + ' - ' + torrentSummary.name
@@ -146,7 +146,7 @@ function chromecastPlayer () {
// airplay player implementation
function airplayPlayer () {
var ret = {
const ret = {
device: null,
addDevice,
getDevices,
@@ -238,7 +238,7 @@ function airplayPlayer () {
// DLNA player implementation
function dlnaPlayer (player) {
var ret = {
const ret = {
device: null,
addDevice,
getDevices,
@@ -274,7 +274,7 @@ function dlnaPlayer (player) {
}
function open () {
var torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
const torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, {
type: 'video/mp4',
title: config.APP_NAME + ' - ' + torrentSummary.name,
@@ -331,7 +331,7 @@ function dlnaPlayer (player) {
// Start polling cast device state, whenever we're connected
function startStatusInterval () {
statusInterval = setInterval(function () {
var player = getPlayer()
const player = getPlayer()
if (player) player.status()
}, 1000)
}
@@ -355,8 +355,8 @@ function toggleMenu (location) {
}
// Find all cast devices of the given type
var player = getPlayer(location)
var devices = player ? player.getDevices() : []
const player = getPlayer(location)
const devices = player ? player.getDevices() : []
if (devices.length === 0) throw new Error('No ' + location + ' devices available')
// Show a menu
@@ -364,10 +364,10 @@ function toggleMenu (location) {
}
function selectDevice (index) {
var {location, devices} = state.devices.castMenu
const {location, devices} = state.devices.castMenu
// Start casting
var player = getPlayer(location)
const player = getPlayer(location)
player.device = devices[index]
player.open()
@@ -383,7 +383,7 @@ function selectDevice (index) {
// Stops casting, move video back to local screen
function stop () {
var player = getPlayer()
const player = getPlayer()
if (player) {
player.stop(function () {
player.device = null
@@ -418,18 +418,18 @@ function getPlayer (location) {
}
function play () {
var player = getPlayer()
const player = getPlayer()
if (player) player.play(castCallback)
}
function pause () {
var player = getPlayer()
const player = getPlayer()
if (player) player.pause(castCallback)
}
function setRate (rate) {
var player
var result = true
let player
let result = true
if (state.playing.location === 'chromecast') {
// TODO find how to control playback rate on chromecast
castCallback()
@@ -444,12 +444,12 @@ function setRate (rate) {
}
function seek (time) {
var player = getPlayer()
const player = getPlayer()
if (player) player.seek(time, castCallback)
}
function setVolume (volume) {
var player = getPlayer()
const player = getPlayer()
if (player) player.volume(volume, castCallback)
}

View File

@@ -4,8 +4,8 @@ module.exports = {
setDispatch
}
var dispatchers = {}
var _dispatch = function () {}
const dispatchers = {}
let _dispatch = function () {}
function setDispatch (dispatch) {
_dispatch = dispatch
@@ -20,8 +20,8 @@ function dispatch (...args) {
// function. This prevents React from updating the listener functions on
// each update().
function dispatcher (...args) {
var str = JSON.stringify(args)
var handler = dispatchers[str]
const str = JSON.stringify(args)
let handler = dispatchers[str]
if (!handler) {
handler = dispatchers[str] = function (e) {
// Do not propagate click to elements below the button

View File

@@ -17,7 +17,7 @@ function run (state) {
state.saved.version = '0.0.0' // Pre-0.7.0 version, so run all migrations
}
var version = state.saved.version
const version = state.saved.version
if (semver.lt(version, '0.7.0')) {
migrate_0_7_0(state.saved)
@@ -40,11 +40,11 @@ function run (state) {
}
function migrate_0_7_0 (saved) {
var fs = require('fs-extra')
var path = require('path')
const fs = require('fs-extra')
const path = require('path')
saved.torrents.forEach(function (ts) {
var infoHash = ts.infoHash
const infoHash = ts.infoHash
// Replace torrentPath with torrentFileName
// There are a number of cases to handle here:
@@ -52,7 +52,7 @@ function migrate_0_7_0 (saved) {
// * Then, relative paths for the default torrents, eg '../static/sintel.torrent'
// * Then, paths computed at runtime for default torrents, eg 'sintel.torrent'
// * Finally, now we're getting rid of torrentPath altogether
var src, dst
let src, dst
if (ts.torrentPath) {
if (path.isAbsolute(ts.torrentPath) || ts.torrentPath.startsWith('..')) {
src = ts.torrentPath
@@ -70,7 +70,7 @@ function migrate_0_7_0 (saved) {
// Replace posterURL with posterFileName
if (ts.posterURL) {
var extension = path.extname(ts.posterURL)
const extension = path.extname(ts.posterURL)
src = path.isAbsolute(ts.posterURL)
? ts.posterURL
: path.join(config.STATIC_PATH, ts.posterURL)
@@ -116,7 +116,7 @@ function migrate_0_12_0 (saved) {
// Undo a terrible bug where clicking Play on a default torrent on a fresh
// install results in a "path missing" error
// See https://github.com/feross/webtorrent-desktop/pull/806
var defaultTorrentFiles = [
const defaultTorrentFiles = [
'6a9759bffd5c0af65319979fb7832189f4f3c35d.torrent',
'88594aaacbde40ef3e2510c47374ec0aa396c08e.torrent',
'6a02592d2bbc069628cd5ed8a54f88ee06ac0ba5.torrent',
@@ -125,7 +125,7 @@ function migrate_0_12_0 (saved) {
]
saved.torrents.forEach(function (torrentSummary) {
if (!defaultTorrentFiles.includes(torrentSummary.torrentFileName)) return
var fileOrFolder = TorrentSummary.getFileOrFolder(torrentSummary)
const fileOrFolder = TorrentSummary.getFileOrFolder(torrentSummary)
if (!fileOrFolder) return
try {
fs.statSync(fileOrFolder)

View File

@@ -9,7 +9,7 @@ module.exports = {
const TorrentSummary = require('./torrent-summary')
const TorrentPlayer = require('./torrent-player')
var cache = {
const cache = {
infoHash: null,
previousIndex: null,
currentIndex: null,
@@ -41,8 +41,8 @@ function getCurrentLocalURL (state) {
}
function updateCache (state) {
var infoHash = state.playing.infoHash
var fileIndex = state.playing.fileIndex
const infoHash = state.playing.infoHash
const fileIndex = state.playing.fileIndex
if (infoHash === cache.infoHash) {
switch (fileIndex) {
@@ -69,7 +69,7 @@ function updateCache (state) {
}
function findPreviousIndex (state) {
var files = TorrentSummary.getByKey(state, state.playing.infoHash).files
const files = TorrentSummary.getByKey(state, state.playing.infoHash).files
for (var i = state.playing.fileIndex - 1; i >= 0; i--) {
if (TorrentPlayer.isPlayable(files[i])) return i
}
@@ -77,7 +77,7 @@ function findPreviousIndex (state) {
}
function findNextIndex (state) {
var files = TorrentSummary.getByKey(state, state.playing.infoHash).files
const files = TorrentSummary.getByKey(state, state.playing.infoHash).files
for (var i = state.playing.fileIndex + 1; i < files.length; i++) {
if (TorrentPlayer.isPlayable(files[i])) return i
}

View File

@@ -3,15 +3,15 @@ module.exports = {
play
}
var config = require('../../config')
var path = require('path')
const config = require('../../config')
const path = require('path')
var VOLUME = 0.15
const VOLUME = 0.15
/* Cache of Audio elements, for instant playback */
var cache = {}
const cache = {}
var sounds = {
const sounds = {
ADD: {
url: 'file://' + path.join(config.STATIC_PATH, 'sound', 'add.wav'),
volume: VOLUME
@@ -47,10 +47,10 @@ var sounds = {
}
function preload () {
for (var name in sounds) {
for (let name in sounds) {
if (!cache[name]) {
var sound = sounds[name]
var audio = cache[name] = new window.Audio()
const sound = sounds[name]
const audio = cache[name] = new window.Audio()
audio.volume = sound.volume
audio.src = sound.url
}
@@ -58,9 +58,9 @@ function preload () {
}
function play (name) {
var audio = cache[name]
let audio = cache[name]
if (!audio) {
var sound = sounds[name]
const sound = sounds[name]
if (!sound) {
throw new Error('Invalid sound name')
}

View File

@@ -1,11 +1,11 @@
var appConfig = require('application-config')('WebTorrent')
var path = require('path')
var {EventEmitter} = require('events')
const appConfig = require('application-config')('WebTorrent')
const path = require('path')
const {EventEmitter} = require('events')
var config = require('../../config')
var migrations = require('./migrations')
const config = require('../../config')
const migrations = require('./migrations')
var State = module.exports = Object.assign(new EventEmitter(), {
const State = module.exports = Object.assign(new EventEmitter(), {
getDefaultPlayState,
load,
save,
@@ -15,7 +15,7 @@ var State = module.exports = Object.assign(new EventEmitter(), {
appConfig.filePath = path.join(config.CONFIG_PATH, 'config.json')
function getDefaultState () {
var LocationHistory = require('location-history')
const LocationHistory = require('location-history')
return {
/*
@@ -98,11 +98,11 @@ function getDefaultPlayState () {
/* If the saved state file doesn't exist yet, here's what we use instead */
function setupSavedState (cb) {
var fs = require('fs-extra')
var parseTorrent = require('parse-torrent')
var parallel = require('run-parallel')
const fs = require('fs-extra')
const parseTorrent = require('parse-torrent')
const parallel = require('run-parallel')
var saved = {
const saved = {
prefs: {
downloadPath: config.DEFAULT_DOWNLOAD_PATH,
isFileHandler: false,
@@ -113,10 +113,10 @@ function setupSavedState (cb) {
version: config.APP_VERSION /* make sure we can upgrade gracefully later */
}
var tasks = []
const tasks = []
config.DEFAULT_TORRENTS.map(function (t, i) {
var infoHash = saved.torrents[i].infoHash
const infoHash = saved.torrents[i].infoHash
tasks.push(function (cb) {
fs.copy(
path.join(config.STATIC_PATH, t.posterFileName),
@@ -139,8 +139,8 @@ function setupSavedState (cb) {
})
function createTorrentObject (t) {
var torrent = fs.readFileSync(path.join(config.STATIC_PATH, t.torrentFileName))
var parsedTorrent = parseTorrent(torrent)
const torrent = fs.readFileSync(path.join(config.STATIC_PATH, t.torrentFileName))
const parsedTorrent = parseTorrent(torrent)
return {
status: 'paused',
@@ -157,18 +157,18 @@ function setupSavedState (cb) {
}
function getPlayingTorrentSummary () {
var infoHash = this.playing.infoHash
const infoHash = this.playing.infoHash
return this.saved.torrents.find((x) => x.infoHash === infoHash)
}
function getPlayingFileSummary () {
var torrentSummary = this.getPlayingTorrentSummary()
const torrentSummary = this.getPlayingTorrentSummary()
if (!torrentSummary) return null
return torrentSummary.files[this.playing.fileIndex]
}
function load (cb) {
var state = getDefaultState()
const state = getDefaultState()
appConfig.read(function (err, saved) {
if (err || !saved.version) {
@@ -193,14 +193,14 @@ function save (state, cb) {
delete state.saveStateTimeout
// Clean up, so that we're not saving any pending state
var copy = Object.assign({}, state.saved)
const copy = Object.assign({}, state.saved)
// Remove torrents pending addition to the list, where we haven't finished
// reading the torrent file or file(s) to seed & don't have an infohash
copy.torrents = copy.torrents
.filter((x) => x.infoHash)
.map(function (x) {
var torrent = {}
for (var key in x) {
const torrent = {}
for (let key in x) {
if (key === 'progress' || key === 'torrentKey') {
continue // Don't save progress info or key for the webtorrent process
}

View File

@@ -14,7 +14,7 @@ const url = require('url')
const config = require('../../config')
var telemetry
let telemetry
function init (state) {
telemetry = state.saved.telemetry
@@ -23,7 +23,7 @@ function init (state) {
reset()
}
var now = new Date()
const now = new Date()
telemetry.version = config.APP_VERSION
telemetry.timestamp = now.toISOString()
telemetry.localTime = now.toTimeString()
@@ -56,17 +56,17 @@ function reset () {
function postToServer () {
// Serialize the telemetry summary
var payload = new Buffer(JSON.stringify(telemetry), 'utf8')
const payload = new Buffer(JSON.stringify(telemetry), 'utf8')
// POST to our server
var options = url.parse(config.TELEMETRY_URL)
const options = url.parse(config.TELEMETRY_URL)
options.method = 'POST'
options.headers = {
'Content-Type': 'application/json',
'Content-Length': payload.length
}
var req = https.request(options, function (res) {
const req = https.request(options, function (res) {
if (res.statusCode === 200) {
console.log('Successfully posted telemetry summary')
reset()
@@ -85,7 +85,7 @@ function postToServer () {
// collects screen resolution, etc
function createSummary () {
// Make a 256-bit random unique ID
var userID = crypto.randomBytes(32).toString('hex')
const userID = crypto.randomBytes(32).toString('hex')
return { userID }
}
@@ -111,10 +111,10 @@ function getSystemInfo () {
// Get the number of torrents, rounded to the nearest power of two
function getApproxNumTorrents (state) {
var exactNum = state.saved.torrents.length
const exactNum = state.saved.torrents.length
if (exactNum === 0) return 0
// Otherwise, return 1, 2, 4, 8, etc by rounding in log space
var log2 = Math.log(exactNum) / Math.log(2)
const log2 = Math.log(exactNum) / Math.log(2)
return 1 << Math.round(log2)
}
@@ -124,8 +124,8 @@ function logUncaughtError (procName, e) {
// Hopefully uncaught errors immediately on startup are fixed in dev
if (!telemetry) return
var message
var stack = ''
let message
let stack = ''
if (e == null) {
message = 'Unexpected undefined error'
} else if (e.error) {
@@ -165,14 +165,14 @@ function logUncaughtError (procName, e) {
if (stack.length > 1000) stack = stack.substring(0, 1000)
// Log the app version *at the time of the error*
var version = config.APP_VERSION
const version = config.APP_VERSION
telemetry.uncaughtErrors.push({process: procName, message, stack, version})
}
// Turns a DOM element into a string, eg "DIV.my-class.visible"
function getElemString (elem) {
var ret = elem.tagName
let ret = elem.tagName
try {
ret += '.' + Array.from(elem.classList).join('.')
} catch (e) {}
@@ -186,7 +186,7 @@ function logPlayAttempt (result) {
return console.error('Unknown play attempt result', result)
}
var attempts = telemetry.playAttempts
const attempts = telemetry.playAttempts
attempts.total = (attempts.total || 0) + 1
attempts[result] = (attempts[result] || 0) + 1
}

View File

@@ -6,7 +6,7 @@ module.exports = {
isPlayableTorrentSummary
}
var path = require('path')
const path = require('path')
// Checks whether a fileSummary or file path is audio/video that we can play,
// based on the file extension
@@ -46,13 +46,13 @@ function isAudio (file) {
// - a file object where obj.name is ends in .torrent
// - a string that's a magnet link (magnet://...)
function isTorrent (file) {
var isTorrentFile = getFileExtension(file) === '.torrent'
var isMagnet = typeof file === 'string' && /^(stream-)?magnet:/.test(file)
const isTorrentFile = getFileExtension(file) === '.torrent'
const isMagnet = typeof file === 'string' && /^(stream-)?magnet:/.test(file)
return isTorrentFile || isMagnet
}
function getFileExtension (file) {
var name = typeof file === 'string' ? file : file.name
const name = typeof file === 'string' ? file : file.name
return path.extname(name).toLowerCase()
}

View File

@@ -1,22 +1,22 @@
module.exports = torrentPoster
var captureVideoFrame = require('./capture-video-frame')
var path = require('path')
const captureVideoFrame = require('./capture-video-frame')
const path = require('path')
function torrentPoster (torrent, cb) {
// First, try to use a poster image if available
var posterFile = torrent.files.filter(function (file) {
const posterFile = torrent.files.filter(function (file) {
return /^poster\.(jpg|png|gif)$/.test(file.name)
})[0]
if (posterFile) return torrentPosterFromImage(posterFile, torrent, cb)
// Second, try to use the largest video file
// Filter out file formats that the <video> tag definitely can't play
var videoFile = getLargestFileByExtension(torrent, ['.mp4', '.m4v', '.webm', '.mov', '.mkv'])
const videoFile = getLargestFileByExtension(torrent, ['.mp4', '.m4v', '.webm', '.mov', '.mkv'])
if (videoFile) return torrentPosterFromVideo(videoFile, torrent, cb)
// Third, try to use the largest image file
var imgFile = getLargestFileByExtension(torrent, ['.gif', '.jpg', '.jpeg', '.png'])
const imgFile = getLargestFileByExtension(torrent, ['.gif', '.jpg', '.jpeg', '.png'])
if (imgFile) return torrentPosterFromImage(imgFile, torrent, cb)
// TODO: generate a waveform from the largest sound file
@@ -25,8 +25,8 @@ function torrentPoster (torrent, cb) {
}
function getLargestFileByExtension (torrent, extensions) {
var files = torrent.files.filter(function (file) {
var extname = path.extname(file.name).toLowerCase()
const files = torrent.files.filter(function (file) {
const extname = path.extname(file.name).toLowerCase()
return extensions.indexOf(extname) !== -1
})
if (files.length === 0) return undefined
@@ -36,15 +36,15 @@ function getLargestFileByExtension (torrent, extensions) {
}
function torrentPosterFromVideo (file, torrent, cb) {
var index = torrent.files.indexOf(file)
const index = torrent.files.indexOf(file)
var server = torrent.createServer(0)
const server = torrent.createServer(0)
server.listen(0, onListening)
function onListening () {
var port = server.address().port
var url = 'http://localhost:' + port + '/' + index
var video = document.createElement('video')
const port = server.address().port
const url = 'http://localhost:' + port + '/' + index
const video = document.createElement('video')
video.addEventListener('canplay', onCanPlay)
video.volume = 0
@@ -61,7 +61,7 @@ function torrentPosterFromVideo (file, torrent, cb) {
function onSeeked () {
video.removeEventListener('seeked', onSeeked)
var buf = captureVideoFrame(video)
const buf = captureVideoFrame(video)
// unload video element
video.pause()
@@ -78,6 +78,6 @@ function torrentPosterFromVideo (file, torrent, cb) {
}
function torrentPosterFromImage (file, torrent, cb) {
var extname = path.extname(file.name)
const extname = path.extname(file.name)
file.getBuffer((err, buf) => cb(err, buf, extname))
}

View File

@@ -6,8 +6,8 @@ module.exports = {
getFileOrFolder
}
var path = require('path')
var config = require('../../config')
const path = require('path')
const config = require('../../config')
// Expects a torrentSummary
// Returns an absolute path to the torrent file, or null if unavailable
@@ -20,7 +20,7 @@ function getTorrentPath (torrentSummary) {
// Returns an absolute path to the poster image, or null if unavailable
function getPosterPath (torrentSummary) {
if (!torrentSummary || !torrentSummary.posterFileName) return null
var posterPath = path.join(config.POSTER_PATH, torrentSummary.posterFileName)
const posterPath = path.join(config.POSTER_PATH, torrentSummary.posterFileName)
// Work around a Chrome bug (reproduced in vanilla Chrome, not just Electron):
// Backslashes in URLS in CSS cause bizarre string encoding issues
return posterPath.replace(/\\/g, '/')
@@ -29,7 +29,7 @@ function getPosterPath (torrentSummary) {
// Expects a torrentSummary
// Returns a torrentID: filename, magnet URI, or infohash
function getTorrentID (torrentSummary) {
var s = torrentSummary
const s = torrentSummary
if (s.torrentFileName) { // Load torrent file from disk
return getTorrentPath(s)
} else { // Load torrent from DHT
@@ -51,7 +51,7 @@ function getByKey (state, torrentKey) {
// TODO: make this assumption explicit, enforce it in the `create-torrent`
// module. Store root folder explicitly to avoid hacky path processing below.
function getFileOrFolder (torrentSummary) {
var ts = torrentSummary
const ts = torrentSummary
if (!ts.path || !ts.files || ts.files.length === 0) return null
return path.join(ts.path, ts.files[0].path.split('/')[0])
}