From 3f6cc97a027339e9ea9d6d024d660210c48fc3a5 Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 31 Aug 2016 14:36:11 -0700 Subject: [PATCH] Style: no more var --- .travis.yml | 2 +- bin/extra-lint.js | 7 +- src/config.js | 16 +- src/crash-reporter.js | 4 +- src/main/announcement.js | 10 +- src/main/dialog.js | 14 +- src/main/dock.js | 8 +- src/main/external-player.js | 14 +- src/main/handlers.js | 72 ++++---- src/main/index.js | 48 ++--- src/main/ipc.js | 38 ++-- src/main/log.js | 6 +- src/main/menu.js | 20 +- src/main/power-save-blocker.js | 6 +- src/main/shell.js | 4 +- src/main/shortcuts.js | 4 +- src/main/squirrel-win32.js | 32 ++-- src/main/thumbar.js | 8 +- src/main/tray.js | 14 +- src/main/updater.js | 12 +- src/main/user-tasks.js | 4 +- src/main/windows/about.js | 8 +- src/main/windows/main.js | 24 +-- src/main/windows/webtorrent.js | 10 +- src/renderer/components/header.js | 6 +- src/renderer/components/path-selector.js | 2 +- .../components/remove-torrent-modal.js | 6 +- .../components/unsupported-media-modal.js | 18 +- .../components/update-available-modal.js | 2 +- src/renderer/controllers/media-controller.js | 8 +- .../controllers/playback-controller.js | 54 +++--- src/renderer/controllers/prefs-controller.js | 19 +- .../controllers/subtitles-controller.js | 50 ++--- .../controllers/torrent-controller.js | 40 ++-- .../controllers/torrent-list-controller.js | 50 ++--- src/renderer/controllers/update-controller.js | 4 +- src/renderer/lib/capture-video-frame.js | 6 +- src/renderer/lib/cast.js | 46 ++--- src/renderer/lib/dispatcher.js | 8 +- src/renderer/lib/migrations.js | 16 +- src/renderer/lib/playlist.js | 10 +- src/renderer/lib/sound.js | 20 +- src/renderer/lib/state.js | 42 ++--- src/renderer/lib/telemetry.js | 26 +-- src/renderer/lib/torrent-player.js | 8 +- src/renderer/lib/torrent-poster.js | 28 +-- src/renderer/lib/torrent-summary.js | 10 +- src/renderer/main.js | 44 ++--- src/renderer/pages/App.js | 26 +-- src/renderer/pages/create-torrent-page.js | 41 +++-- src/renderer/pages/player-page.js | 174 +++++++++--------- src/renderer/pages/preferences-page.js | 8 +- src/renderer/pages/torrent-list-page.js | 106 +++++------ src/renderer/webtorrent.js | 104 +++++------ 54 files changed, 682 insertions(+), 685 deletions(-) diff --git a/.travis.yml b/.travis.yml index abcb8e4463..33f6e7bd16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ language: node_js node_js: - 'node' -install: npm install standard depcheck +install: npm install standard depcheck walk-sync diff --git a/bin/extra-lint.js b/bin/extra-lint.js index 4ee4d8f009..4351dbb82c 100755 --- a/bin/extra-lint.js +++ b/bin/extra-lint.js @@ -30,10 +30,9 @@ files.forEach(function (file) { error = 'Line >100 chars' } - // TODO: No vars - // if (line.match(/^var /) || line.match(/ var /)) { - // error = 'Use const or let' - // } + if (line.match(/^var /) || line.match(/ var /)) { + error = 'Use const or let' + } if (error) { let name = path.basename(file) diff --git a/src/config.js b/src/config.js index 2848ea68f0..2b16077e62 100644 --- a/src/config.js +++ b/src/config.js @@ -1,12 +1,12 @@ -var appConfig = require('application-config')('WebTorrent') -var fs = require('fs') -var path = require('path') +const appConfig = require('application-config')('WebTorrent') +const fs = require('fs') +const path = require('path') -var APP_NAME = 'WebTorrent' -var APP_TEAM = 'WebTorrent, LLC' -var APP_VERSION = require('../package.json').version +const APP_NAME = 'WebTorrent' +const APP_TEAM = 'WebTorrent, LLC' +const APP_VERSION = require('../package.json').version -var PORTABLE_PATH = path.join(path.dirname(process.execPath), 'Portable Settings') +const PORTABLE_PATH = path.join(path.dirname(process.execPath), 'Portable Settings') module.exports = { ANNOUNCEMENT_URL: 'https://webtorrent.io/desktop/announcement', @@ -95,7 +95,7 @@ function getDefaultDownloadPath () { return path.join(getConfigPath(), 'Downloads') } - var electron = require('electron') + const electron = require('electron') return process.type === 'renderer' ? electron.remote.app.getPath('downloads') diff --git a/src/crash-reporter.js b/src/crash-reporter.js index 359f56450b..44e4377c6b 100644 --- a/src/crash-reporter.js +++ b/src/crash-reporter.js @@ -2,8 +2,8 @@ module.exports = { init } -var config = require('./config') -var electron = require('electron') +const config = require('./config') +const electron = require('electron') function init () { electron.crashReporter.start({ diff --git a/src/main/announcement.js b/src/main/announcement.js index 9f7155d06b..662ce51c8f 100644 --- a/src/main/announcement.js +++ b/src/main/announcement.js @@ -2,12 +2,12 @@ module.exports = { init } -var electron = require('electron') +const electron = require('electron') -var config = require('../config') -var log = require('./log') +const config = require('../config') +const log = require('./log') -var ANNOUNCEMENT_URL = config.ANNOUNCEMENT_URL + +const ANNOUNCEMENT_URL = config.ANNOUNCEMENT_URL + '?version=' + config.APP_VERSION + '&platform=' + process.platform @@ -26,7 +26,7 @@ var ANNOUNCEMENT_URL = config.ANNOUNCEMENT_URL + * } */ function init () { - var get = require('simple-get') + const get = require('simple-get') get.concat(ANNOUNCEMENT_URL, onResponse) } diff --git a/src/main/dialog.js b/src/main/dialog.js index b1ef94a8fa..f94a53b853 100644 --- a/src/main/dialog.js +++ b/src/main/dialog.js @@ -6,10 +6,10 @@ module.exports = { openFiles } -var electron = require('electron') +const electron = require('electron') -var log = require('./log') -var windows = require('./windows') +const log = require('./log') +const windows = require('./windows') /** * Show open dialog to create a single-file torrent. @@ -17,7 +17,7 @@ var windows = require('./windows') function openSeedFile () { if (!windows.main.win) return log('openSeedFile') - var opts = { + const opts = { title: 'Select a file for the torrent.', properties: [ 'openFile' ] } @@ -37,7 +37,7 @@ function openSeedFile () { function openSeedDirectory () { if (!windows.main.win) return log('openSeedDirectory') - var opts = process.platform === 'darwin' + const opts = process.platform === 'darwin' ? { title: 'Select a file or folder for the torrent.', properties: [ 'openFile', 'openDirectory' ] @@ -61,7 +61,7 @@ function openSeedDirectory () { function openFiles () { if (!windows.main.win) return log('openFiles') - var opts = process.platform === 'darwin' + const opts = process.platform === 'darwin' ? { title: 'Select a file or folder to add.', properties: [ 'openFile', 'openDirectory' ] @@ -84,7 +84,7 @@ function openFiles () { function openTorrentFile () { if (!windows.main.win) return log('openTorrentFile') - var opts = { + const opts = { title: 'Select a .torrent file.', filters: [{ name: 'Torrent Files', extensions: ['torrent'] }], properties: [ 'openFile', 'multiSelections' ] diff --git a/src/main/dock.js b/src/main/dock.js index 7056368995..c882f1a0c4 100644 --- a/src/main/dock.js +++ b/src/main/dock.js @@ -4,17 +4,17 @@ module.exports = { setBadge } -var {app, Menu} = require('electron') +const {app, Menu} = require('electron') -var dialog = require('./dialog') -var log = require('./log') +const dialog = require('./dialog') +const log = require('./log') /** * Add a right-click menu to the dock icon. (Mac) */ function init () { if (!app.dock) return - var menu = Menu.buildFromTemplate(getMenuTemplate()) + const menu = Menu.buildFromTemplate(getMenuTemplate()) app.dock.setMenu(menu) } diff --git a/src/main/external-player.js b/src/main/external-player.js index 844a3a3a6b..a048a08280 100644 --- a/src/main/external-player.js +++ b/src/main/external-player.js @@ -4,14 +4,14 @@ module.exports = { checkInstall } -var cp = require('child_process') -var vlcCommand = require('vlc-command') +const cp = require('child_process') +const vlcCommand = require('vlc-command') -var log = require('./log') -var windows = require('./windows') +const log = require('./log') +const windows = require('./windows') // holds a ChildProcess while we're playing a video in an external player, null otherwise -var proc +let proc = null function checkInstall (path, cb) { // check for VLC if external player has not been specified by the user @@ -26,7 +26,7 @@ function spawn (path, url, title) { // Try to find and use VLC if external player is not specified vlcCommand(function (err, vlcPath) { if (err) return windows.main.dispatch('externalPlayerNotFound') - var args = [ + const args = [ '--play-and-exit', '--video-on-top', '--quiet', @@ -50,7 +50,7 @@ function spawnExternal (path, args) { proc = cp.spawn(path, args, {stdio: 'ignore'}) // If it works, close the modal after a second - var closeModalTimeout = setTimeout(() => + const closeModalTimeout = setTimeout(() => windows.main.dispatch('exitModal'), 1000) proc.on('close', function (code) { diff --git a/src/main/handlers.js b/src/main/handlers.js index eb2f18a6c2..930a303b2f 100644 --- a/src/main/handlers.js +++ b/src/main/handlers.js @@ -3,8 +3,8 @@ module.exports = { uninstall } -var config = require('../config') -var path = require('path') +const config = require('../config') +const path = require('path') function install () { if (process.platform === 'darwin') { @@ -31,8 +31,8 @@ function uninstall () { } function installDarwin () { - var electron = require('electron') - var app = electron.app + const electron = require('electron') + const app = electron.app // On Mac, only protocols that are listed in `Info.plist` can be set as the // default handler at runtime. @@ -44,18 +44,18 @@ function installDarwin () { function uninstallDarwin () {} -var EXEC_COMMAND = [ process.execPath ] +const EXEC_COMMAND = [ process.execPath ] if (!config.IS_PRODUCTION) { EXEC_COMMAND.push(config.ROOT_PATH) } function installWin32 () { - var Registry = require('winreg') + const Registry = require('winreg') - var log = require('./log') + const log = require('./log') - var iconPath = path.join( + const iconPath = path.join( process.resourcesPath, 'app.asar.unpacked', 'static', 'WebTorrentFile.ico' ) registerProtocolHandlerWin32( @@ -100,7 +100,7 @@ function installWin32 () { */ function registerProtocolHandlerWin32 (protocol, name, icon, command) { - var protocolKey = new Registry({ + const protocolKey = new Registry({ hive: Registry.HKCU, // HKEY_CURRENT_USER key: '\\Software\\Classes\\' + protocol }) @@ -120,7 +120,7 @@ function installWin32 () { function setIcon (err) { if (err) log.error(err.message) - var iconKey = new Registry({ + const iconKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + protocol + '\\DefaultIcon' }) @@ -130,7 +130,7 @@ function installWin32 () { function setCommand (err) { if (err) log.error(err.message) - var commandKey = new Registry({ + const commandKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + protocol + '\\shell\\open\\command' }) @@ -161,7 +161,7 @@ function installWin32 () { setExt() function setExt () { - var extKey = new Registry({ + const extKey = new Registry({ hive: Registry.HKCU, // HKEY_CURRENT_USER key: '\\Software\\Classes\\' + ext }) @@ -171,7 +171,7 @@ function installWin32 () { function setId (err) { if (err) log.error(err.message) - var idKey = new Registry({ + const idKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + id }) @@ -181,7 +181,7 @@ function installWin32 () { function setIcon (err) { if (err) log.error(err.message) - var iconKey = new Registry({ + const iconKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + id + '\\DefaultIcon' }) @@ -191,7 +191,7 @@ function installWin32 () { function setCommand (err) { if (err) log.error(err.message) - var commandKey = new Registry({ + const commandKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + id + '\\shell\\open\\command' }) @@ -205,7 +205,7 @@ function installWin32 () { } function uninstallWin32 () { - var Registry = require('winreg') + const Registry = require('winreg') unregisterProtocolHandlerWin32('magnet', EXEC_COMMAND) unregisterProtocolHandlerWin32('stream-magnet', EXEC_COMMAND) @@ -215,7 +215,7 @@ function uninstallWin32 () { getCommand() function getCommand () { - var commandKey = new Registry({ + const commandKey = new Registry({ hive: Registry.HKCU, // HKEY_CURRENT_USER key: '\\Software\\Classes\\' + protocol + '\\shell\\open\\command' }) @@ -227,7 +227,7 @@ function uninstallWin32 () { } function destroyProtocol () { - var protocolKey = new Registry({ + const protocolKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + protocol }) @@ -239,7 +239,7 @@ function uninstallWin32 () { eraseId() function eraseId () { - var idKey = new Registry({ + const idKey = new Registry({ hive: Registry.HKCU, // HKEY_CURRENT_USER key: '\\Software\\Classes\\' + id }) @@ -247,7 +247,7 @@ function uninstallWin32 () { } function getExt () { - var extKey = new Registry({ + const extKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Classes\\' + ext }) @@ -259,7 +259,7 @@ function uninstallWin32 () { } function destroyExt () { - var extKey = new Registry({ + const extKey = new Registry({ hive: Registry.HKCU, // HKEY_CURRENT_USER key: '\\Software\\Classes\\' + ext }) @@ -273,12 +273,12 @@ function commandToArgs (command) { } function installLinux () { - var fs = require('fs-extra') - var os = require('os') - var path = require('path') + const fs = require('fs-extra') + const os = require('os') + const path = require('path') - var config = require('../config') - var log = require('./log') + const config = require('../config') + const log = require('./log') // Do not install in user dir if running on system if (/^\/opt/.test(process.execPath)) return @@ -287,7 +287,7 @@ function installLinux () { installIconFile() function installDesktopFile () { - var templatePath = path.join( + const templatePath = path.join( config.STATIC_PATH, 'linux', 'webtorrent-desktop.desktop' ) fs.readFile(templatePath, 'utf8', writeDesktopFile) @@ -296,7 +296,7 @@ function installLinux () { function writeDesktopFile (err, desktopFile) { if (err) return log.error(err.message) - var appPath = config.IS_PRODUCTION + const appPath = config.IS_PRODUCTION ? path.dirname(process.execPath) : config.ROOT_PATH @@ -305,7 +305,7 @@ function installLinux () { desktopFile = desktopFile.replace(/\$EXEC_PATH/g, EXEC_COMMAND.join(' ')) desktopFile = desktopFile.replace(/\$TRY_EXEC_PATH/g, process.execPath) - var desktopFilePath = path.join( + const desktopFilePath = path.join( os.homedir(), '.local', 'share', @@ -319,14 +319,14 @@ function installLinux () { } function installIconFile () { - var iconStaticPath = path.join(config.STATIC_PATH, 'WebTorrent.png') + const iconStaticPath = path.join(config.STATIC_PATH, 'WebTorrent.png') fs.readFile(iconStaticPath, writeIconFile) } function writeIconFile (err, iconFile) { if (err) return log.error(err.message) - var iconFilePath = path.join( + const iconFilePath = path.join( os.homedir(), '.local', 'share', @@ -341,11 +341,11 @@ function installLinux () { } function uninstallLinux () { - var os = require('os') - var path = require('path') - var fs = require('fs-extra') + const os = require('os') + const path = require('path') + const fs = require('fs-extra') - var desktopFilePath = path.join( + const desktopFilePath = path.join( os.homedir(), '.local', 'share', @@ -354,7 +354,7 @@ function uninstallLinux () { ) fs.removeSync(desktopFilePath) - var iconFilePath = path.join( + const iconFilePath = path.join( os.homedir(), '.local', 'share', diff --git a/src/main/index.js b/src/main/index.js index 3ed6d3447b..e3778701a7 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,26 +1,26 @@ console.time('init') -var electron = require('electron') - -var app = electron.app -var ipcMain = electron.ipcMain - -var announcement = require('./announcement') -var config = require('../config') -var crashReporter = require('../crash-reporter') -var dialog = require('./dialog') -var dock = require('./dock') -var ipc = require('./ipc') -var log = require('./log') -var menu = require('./menu') -var squirrelWin32 = require('./squirrel-win32') -var tray = require('./tray') -var updater = require('./updater') -var userTasks = require('./user-tasks') -var windows = require('./windows') - -var shouldQuit = false -var argv = sliceArgv(process.argv) +const electron = require('electron') + +const app = electron.app +const ipcMain = electron.ipcMain + +const announcement = require('./announcement') +const config = require('../config') +const crashReporter = require('../crash-reporter') +const dialog = require('./dialog') +const dock = require('./dock') +const ipc = require('./ipc') +const log = require('./log') +const menu = require('./menu') +const squirrelWin32 = require('./squirrel-win32') +const tray = require('./tray') +const updater = require('./updater') +const userTasks = require('./user-tasks') +const windows = require('./windows') + +let shouldQuit = false +let argv = sliceArgv(process.argv) if (config.IS_PRODUCTION) { // When Electron is running in production mode (packaged app), then run React @@ -51,7 +51,7 @@ function init () { app.setPath('userData', config.CONFIG_PATH) } - var isReady = false // app ready, windows can be created + let isReady = false // app ready, windows can be created app.ipcReady = false // main window has finished loading and IPC is ready app.isQuitting = false @@ -78,7 +78,7 @@ function init () { // Report uncaught exceptions process.on('uncaughtException', (err) => { console.error(err) - var error = {message: err.message, stack: err.stack} + const error = {message: err.message, stack: err.stack} windows.main.dispatch('uncaughtError', 'main', error) }) }) @@ -148,7 +148,7 @@ function sliceArgv (argv) { } function processArgv (argv) { - var torrentIds = [] + let torrentIds = [] argv.forEach(function (arg) { if (arg === '-n') { dialog.openSeedDirectory() diff --git a/src/main/ipc.js b/src/main/ipc.js index 2e9ffc3331..23d410f5aa 100644 --- a/src/main/ipc.js +++ b/src/main/ipc.js @@ -2,27 +2,27 @@ module.exports = { init } -var electron = require('electron') - -var app = electron.app - -var dialog = require('./dialog') -var dock = require('./dock') -var handlers = require('./handlers') -var log = require('./log') -var menu = require('./menu') -var powerSaveBlocker = require('./power-save-blocker') -var shell = require('./shell') -var shortcuts = require('./shortcuts') -var externalPlayer = require('./external-player') -var windows = require('./windows') -var thumbar = require('./thumbar') +const electron = require('electron') + +const app = electron.app + +const dialog = require('./dialog') +const dock = require('./dock') +const handlers = require('./handlers') +const log = require('./log') +const menu = require('./menu') +const powerSaveBlocker = require('./power-save-blocker') +const shell = require('./shell') +const shortcuts = require('./shortcuts') +const externalPlayer = require('./external-player') +const windows = require('./windows') +const thumbar = require('./thumbar') // Messages from the main process, to be sent once the WebTorrent process starts -var messageQueueMainToWebTorrent = [] +const messageQueueMainToWebTorrent = [] function init () { - var ipc = electron.ipcMain + const ipc = electron.ipcMain ipc.once('ipcReady', function (e) { app.ipcReady = true @@ -106,7 +106,7 @@ function init () { * Windows: Main */ - var main = windows.main + const main = windows.main ipc.on('setAspectRatio', (e, ...args) => main.setAspectRatio(...args)) ipc.on('setBounds', (e, ...args) => main.setBounds(...args)) @@ -130,7 +130,7 @@ function init () { ipc.on('quitExternalPlayer', () => externalPlayer.kill()) // Capture all events - var oldEmit = ipc.emit + const oldEmit = ipc.emit ipc.emit = function (name, e, ...args) { // Relay messages between the main window and the WebTorrent hidden window if (name.startsWith('wt-') && !app.isQuitting) { diff --git a/src/main/log.js b/src/main/log.js index 1c6eb0c647..9510e35387 100644 --- a/src/main/log.js +++ b/src/main/log.js @@ -8,10 +8,10 @@ module.exports.error = error * where they can be viewed in Developer Tools. */ -var electron = require('electron') -var windows = require('./windows') +const electron = require('electron') +const windows = require('./windows') -var app = electron.app +const app = electron.app function log (...args) { if (app.ipcReady) { diff --git a/src/main/menu.js b/src/main/menu.js index 2e4d6373f5..5f51201497 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -8,16 +8,16 @@ module.exports = { onToggleFullScreen } -var electron = require('electron') +const electron = require('electron') -var app = electron.app +const app = electron.app -var config = require('../config') -var dialog = require('./dialog') -var shell = require('./shell') -var windows = require('./windows') +const config = require('../config') +const dialog = require('./dialog') +const shell = require('./shell') +const windows = require('./windows') -var menu +let menu = null function init () { menu = electron.Menu.buildFromTemplate(getMenuTemplate()) @@ -72,8 +72,8 @@ function onToggleFullScreen (flag) { } function getMenuItem (label) { - for (var i = 0; i < menu.items.length; i++) { - var menuItem = menu.items[i].submenu.items.find(function (item) { + for (let i = 0; i < menu.items.length; i++) { + const menuItem = menu.items[i].submenu.items.find(function (item) { return item.label === label }) if (menuItem) return menuItem @@ -81,7 +81,7 @@ function getMenuItem (label) { } function getMenuTemplate () { - var template = [ + const template = [ { label: 'File', submenu: [ diff --git a/src/main/power-save-blocker.js b/src/main/power-save-blocker.js index 26c85a67a9..9756c6f7dc 100644 --- a/src/main/power-save-blocker.js +++ b/src/main/power-save-blocker.js @@ -3,10 +3,10 @@ module.exports = { disable } -var electron = require('electron') -var log = require('./log') +const electron = require('electron') +const log = require('./log') -var blockId = 0 +let blockId = 0 /** * Block the system from entering low-power (sleep) mode or turning off the diff --git a/src/main/shell.js b/src/main/shell.js index 83bf381f21..cd133fe68d 100644 --- a/src/main/shell.js +++ b/src/main/shell.js @@ -5,8 +5,8 @@ module.exports = { moveItemToTrash } -var electron = require('electron') -var log = require('./log') +const electron = require('electron') +const log = require('./log') /** * Open the given external protocol URL in the desktop’s default manner. diff --git a/src/main/shortcuts.js b/src/main/shortcuts.js index 9fd71e8a70..eb045cc929 100644 --- a/src/main/shortcuts.js +++ b/src/main/shortcuts.js @@ -3,8 +3,8 @@ module.exports = { enable } -var electron = require('electron') -var windows = require('./windows') +const electron = require('electron') +const windows = require('./windows') function enable () { // Register play/pause media key, available on some keyboards. diff --git a/src/main/squirrel-win32.js b/src/main/squirrel-win32.js index 9008d9487b..24488bea02 100644 --- a/src/main/squirrel-win32.js +++ b/src/main/squirrel-win32.js @@ -2,18 +2,18 @@ module.exports = { handleEvent } -var cp = require('child_process') -var electron = require('electron') -var fs = require('fs') -var os = require('os') -var path = require('path') +const cp = require('child_process') +const electron = require('electron') +const fs = require('fs') +const os = require('os') +const path = require('path') -var app = electron.app +const app = electron.app -var handlers = require('./handlers') +const handlers = require('./handlers') -var EXE_NAME = path.basename(process.execPath) -var UPDATE_EXE = path.join(process.execPath, '..', '..', 'Update.exe') +const EXE_NAME = path.basename(process.execPath) +const UPDATE_EXE = path.join(process.execPath, '..', '..', 'Update.exe') function handleEvent (cmd) { if (cmd === '--squirrel-install') { @@ -73,9 +73,9 @@ function handleEvent (cmd) { * the output from standard out. */ function spawn (command, args, cb) { - var stdout = '' - - var child + let stdout = '' + let error = null + let child = null try { child = cp.spawn(command, args) } catch (err) { @@ -90,10 +90,10 @@ function spawn (command, args, cb) { stdout += data }) - var error = null child.on('error', function (processError) { error = processError }) + child.on('close', function (code, signal) { if (code !== 0 && !error) error = new Error('Command failed: #{signal || code}') if (error) error.stdout = stdout @@ -122,12 +122,12 @@ function createShortcuts (cb) { * command. */ function updateShortcuts (cb) { - var homeDir = os.homedir() + const homeDir = os.homedir() if (homeDir) { - var desktopShortcutPath = path.join(homeDir, 'Desktop', 'WebTorrent.lnk') + const desktopShortcutPath = path.join(homeDir, 'Desktop', 'WebTorrent.lnk') // If the desktop shortcut was deleted by the user, then keep it deleted. fs.access(desktopShortcutPath, function (err) { - var desktopShortcutExists = !err + const desktopShortcutExists = !err createShortcuts(function () { if (desktopShortcutExists) { cb() diff --git a/src/main/thumbar.js b/src/main/thumbar.js index 6793cfae65..fd30d576fe 100644 --- a/src/main/thumbar.js +++ b/src/main/thumbar.js @@ -12,10 +12,10 @@ module.exports = { * or activating the window. */ -var path = require('path') -var config = require('../config') +const path = require('path') +const config = require('../config') -var windows = require('./windows') +const windows = require('./windows') const PREV_ICON = path.join(config.STATIC_PATH, 'PreviousTrackThumbnailBarButton.png') const PLAY_ICON = path.join(config.STATIC_PATH, 'PlayThumbnailBarButton.png') @@ -27,7 +27,7 @@ const PREV = 0 const PLAY_PAUSE = 1 const NEXT = 2 -var buttons = [] +let buttons = [] /** * Show the Windows thumbnail toolbar buttons. diff --git a/src/main/tray.js b/src/main/tray.js index 7816ff4b46..e039572392 100644 --- a/src/main/tray.js +++ b/src/main/tray.js @@ -4,14 +4,14 @@ module.exports = { setWindowFocus } -var electron = require('electron') +const electron = require('electron') -var app = electron.app +const app = electron.app -var config = require('../config') -var windows = require('./windows') +const config = require('../config') +const windows = require('./windows') -var tray +let tray function init () { if (process.platform === 'linux') { @@ -49,7 +49,7 @@ function initWin32 () { * Check for libappindicator1 support before creating tray icon */ function checkLinuxTraySupport (cb) { - var cp = require('child_process') + const cp = require('child_process') // Check that we're on Ubuntu (or another debian system) and that we have // libappindicator1. If WebTorrent was installed from the deb file, we should @@ -74,7 +74,7 @@ function createTray () { } function updateTrayMenu () { - var contextMenu = electron.Menu.buildFromTemplate(getMenuTemplate()) + const contextMenu = electron.Menu.buildFromTemplate(getMenuTemplate()) tray.setContextMenu(contextMenu) } diff --git a/src/main/updater.js b/src/main/updater.js index d21ab4e2e5..eab07a4ce1 100644 --- a/src/main/updater.js +++ b/src/main/updater.js @@ -2,14 +2,14 @@ module.exports = { init } -var electron = require('electron') -var get = require('simple-get') +const electron = require('electron') +const get = require('simple-get') -var config = require('../config') -var log = require('./log') -var windows = require('./windows') +const config = require('../config') +const log = require('./log') +const windows = require('./windows') -var AUTO_UPDATE_URL = config.AUTO_UPDATE_URL + +const AUTO_UPDATE_URL = config.AUTO_UPDATE_URL + '?version=' + config.APP_VERSION + '&platform=' + process.platform diff --git a/src/main/user-tasks.js b/src/main/user-tasks.js index 47e63f8a3b..a3c6ab54bd 100644 --- a/src/main/user-tasks.js +++ b/src/main/user-tasks.js @@ -2,9 +2,9 @@ module.exports = { init } -var electron = require('electron') +const electron = require('electron') -var app = electron.app +const app = electron.app /** * Add a user task menu to the app icon on right-click. (Windows) diff --git a/src/main/windows/about.js b/src/main/windows/about.js index 2fbfc171d3..3c89c542ce 100644 --- a/src/main/windows/about.js +++ b/src/main/windows/about.js @@ -1,17 +1,17 @@ -var about = module.exports = { +const about = module.exports = { init, win: null } -var config = require('../../config') -var electron = require('electron') +const config = require('../../config') +const electron = require('electron') function init () { if (about.win) { return about.win.show() } - var win = about.win = new electron.BrowserWindow({ + const win = about.win = new electron.BrowserWindow({ backgroundColor: '#ECECEC', center: true, fullscreen: false, diff --git a/src/main/windows/main.js b/src/main/windows/main.js index 4b9129d899..263ff38e97 100644 --- a/src/main/windows/main.js +++ b/src/main/windows/main.js @@ -1,4 +1,4 @@ -var main = module.exports = { +const main = module.exports = { dispatch, hide, init, @@ -14,23 +14,23 @@ var main = module.exports = { win: null } -var electron = require('electron') +const electron = require('electron') -var app = electron.app +const app = electron.app -var config = require('../../config') -var log = require('../log') -var menu = require('../menu') -var tray = require('../tray') +const config = require('../../config') +const log = require('../log') +const menu = require('../menu') +const tray = require('../tray') -var HEADER_HEIGHT = 38 -var TORRENT_HEIGHT = 100 +const HEADER_HEIGHT = 38 +const TORRENT_HEIGHT = 100 function init () { if (main.win) { return main.win.show() } - var win = main.win = new electron.BrowserWindow({ + const win = main.win = new electron.BrowserWindow({ backgroundColor: '#282828', darkTheme: true, // Forces dark theme (GTK+3) icon: getIconPath(), // Window icon (Windows, Linux) @@ -114,7 +114,7 @@ function setBounds (bounds, maximize) { } // Maximize or minimize, if the second argument is present - var willBeMaximized + let willBeMaximized if (maximize === true) { if (!main.win.isMaximized()) { log('setBounds: maximizing') @@ -136,7 +136,7 @@ function setBounds (bounds, maximize) { log('setBounds: setting bounds to ' + JSON.stringify(bounds)) if (bounds.x === null && bounds.y === null) { // X and Y not specified? By default, center on current screen - var scr = electron.screen.getDisplayMatching(main.win.getBounds()) + const scr = electron.screen.getDisplayMatching(main.win.getBounds()) bounds.x = Math.round(scr.bounds.x + scr.bounds.width / 2 - bounds.width / 2) bounds.y = Math.round(scr.bounds.y + scr.bounds.height / 2 - bounds.height / 2) log('setBounds: centered to ' + JSON.stringify(bounds)) diff --git a/src/main/windows/webtorrent.js b/src/main/windows/webtorrent.js index 510fa1b531..e50896a3fa 100644 --- a/src/main/windows/webtorrent.js +++ b/src/main/windows/webtorrent.js @@ -1,4 +1,4 @@ -var webtorrent = module.exports = { +const webtorrent = module.exports = { init, send, show, @@ -6,13 +6,13 @@ var webtorrent = module.exports = { win: null } -var electron = require('electron') +const electron = require('electron') -var config = require('../../config') -var log = require('../log') +const config = require('../../config') +const log = require('../log') function init () { - var win = webtorrent.win = new electron.BrowserWindow({ + const win = webtorrent.win = new electron.BrowserWindow({ backgroundColor: '#1E1E1E', center: true, fullscreen: false, diff --git a/src/renderer/components/header.js b/src/renderer/components/header.js index b92ebbc9fc..c02cea8e14 100644 --- a/src/renderer/components/header.js +++ b/src/renderer/components/header.js @@ -4,7 +4,7 @@ const {dispatcher} = require('../lib/dispatcher') class Header extends React.Component { render () { - var loc = this.props.state.location + const loc = this.props.state.location return (
{this.getTitle()} @@ -31,12 +31,12 @@ class Header extends React.Component { getTitle () { if (process.platform !== 'darwin') return null - var state = this.props.state + const state = this.props.state return (
{state.window.title}
) } getAddButton () { - var state = this.props.state + const state = this.props.state if (state.location.url() !== 'home') return null return ( diff --git a/src/renderer/components/unsupported-media-modal.js b/src/renderer/components/unsupported-media-modal.js index 7a1ae61cac..4d64598d91 100644 --- a/src/renderer/components/unsupported-media-modal.js +++ b/src/renderer/components/unsupported-media-modal.js @@ -6,20 +6,20 @@ const {dispatcher} = require('../lib/dispatcher') module.exports = class UnsupportedMediaModal extends React.Component { render () { - var state = this.props.state - var err = state.modal.error - var message = (err && err.getMessage) + const state = this.props.state + const err = state.modal.error + const message = (err && err.getMessage) ? err.getMessage() : err - var playerPath = state.saved.prefs.externalPlayerPath - var playerName = playerPath + const playerPath = state.saved.prefs.externalPlayerPath + const playerName = playerPath ? path.basename(playerPath).split('.')[0] : 'VLC' - var onPlay = dispatcher('openExternalPlayer') - var actionButton = state.modal.externalPlayerInstalled + const onPlay = dispatcher('openExternalPlayer') + const actionButton = state.modal.externalPlayerInstalled ? () : () - var playerMessage = state.modal.externalPlayerNotFound + const playerMessage = state.modal.externalPlayerNotFound ? 'Couldn\'t run external player. Please make sure it\'s installed.' : '' return ( @@ -39,7 +39,7 @@ module.exports = class UnsupportedMediaModal extends React.Component { electron.shell.openExternal('http://www.videolan.org/vlc/') // TODO: dcposch send a dispatch rather than modifying state directly - var state = this.props.state + const state = this.props.state state.modal.externalPlayerInstalled = true // Assume they'll install it successfully } } diff --git a/src/renderer/components/update-available-modal.js b/src/renderer/components/update-available-modal.js index b322a7eac7..6d6990c6cb 100644 --- a/src/renderer/components/update-available-modal.js +++ b/src/renderer/components/update-available-modal.js @@ -5,7 +5,7 @@ const {dispatch} = require('../lib/dispatcher') module.exports = class UpdateAvailableModal extends React.Component { render () { - var state = this.props.state + const state = this.props.state return (

A new version of WebTorrent is available: v{state.modal.version}

diff --git a/src/renderer/controllers/media-controller.js b/src/renderer/controllers/media-controller.js index 2994e4c201..f2e553a085 100644 --- a/src/renderer/controllers/media-controller.js +++ b/src/renderer/controllers/media-controller.js @@ -20,7 +20,7 @@ module.exports = class MediaController { } mediaError (error) { - var state = this.state + const state = this.state if (state.location.url() === 'player') { state.playing.result = 'error' state.playing.location = 'error' @@ -45,8 +45,8 @@ module.exports = class MediaController { } openExternalPlayer () { - var state = this.state - var mediaURL = Playlist.getCurrentLocalURL(this.state) + const state = this.state + const mediaURL = Playlist.getCurrentLocalURL(this.state) ipcRenderer.send('openExternalPlayer', state.saved.prefs.externalPlayerPath, mediaURL, @@ -55,7 +55,7 @@ module.exports = class MediaController { } externalPlayerNotFound () { - var modal = this.state.modal + const modal = this.state.modal if (modal && modal.id === 'unsupported-media-modal') { modal.externalPlayerNotFound = true } diff --git a/src/renderer/controllers/playback-controller.js b/src/renderer/controllers/playback-controller.js index f1461b915a..8fe29ad093 100644 --- a/src/renderer/controllers/playback-controller.js +++ b/src/renderer/controllers/playback-controller.js @@ -27,7 +27,7 @@ module.exports = class PlaybackController { // * Stream, if not already fully downloaded // * If no file index is provided, restore the most recently viewed file or autoplay the first playFile (infoHash, index /* optional */) { - var state = this.state + const state = this.state if (state.location.url() === 'player') { this.updatePlayer(infoHash, index, false, (err) => { if (err) dispatch('error', err) @@ -52,8 +52,8 @@ module.exports = class PlaybackController { // Open a file in OS default app. openItem (infoHash, index) { - var torrentSummary = TorrentSummary.getByKey(this.state, infoHash) - var filePath = path.join( + const torrentSummary = TorrentSummary.getByKey(this.state, infoHash) + const filePath = path.join( torrentSummary.path, torrentSummary.files[index].path) ipcRenderer.send('openItem', filePath) @@ -61,12 +61,12 @@ module.exports = class PlaybackController { // Toggle (play or pause) the currently playing media playPause () { - var state = this.state + const state = this.state if (state.location.url() !== 'player') return // force rerendering if window is hidden, // in order to bypass `raf` and play/pause media immediately - var mediaTag = document.querySelector('video,audio') + const mediaTag = document.querySelector('video,audio') if (!state.window.isVisible && mediaTag) { if (state.playing.isPaused) mediaTag.play() else mediaTag.pause() @@ -78,7 +78,7 @@ module.exports = class PlaybackController { // Play next file in list (if any) nextTrack () { - var state = this.state + const state = this.state if (Playlist.hasNext(state)) { this.updatePlayer( state.playing.infoHash, Playlist.getNextIndex(state), false, (err) => { @@ -90,7 +90,7 @@ module.exports = class PlaybackController { // Play previous track in list (if any) previousTrack () { - var state = this.state + const state = this.state if (Playlist.hasPrevious(state)) { this.updatePlayer( state.playing.infoHash, Playlist.getPreviousIndex(state), false, (err) => { @@ -102,7 +102,7 @@ module.exports = class PlaybackController { // Play (unpause) the current media play () { - var state = this.state + const state = this.state if (!state.playing.isPaused) return state.playing.isPaused = false if (isCasting(state)) { @@ -113,7 +113,7 @@ module.exports = class PlaybackController { // Pause the currently playing media pause () { - var state = this.state + const state = this.state if (state.playing.isPaused) return state.playing.isPaused = true if (isCasting(state)) { @@ -142,8 +142,8 @@ module.exports = class PlaybackController { // to 0.25 (quarter-speed playback), then goes to -0.25, -0.5, -1, -2, etc // until -16 (fast rewind) changePlaybackRate (direction) { - var state = this.state - var rate = state.playing.playbackRate + const state = this.state + let rate = state.playing.playbackRate if (direction > 0 && rate >= 0.25 && rate < 2) { rate += 0.25 } else if (direction < 0 && rate > 0.25 && rate <= 2) { @@ -178,7 +178,7 @@ module.exports = class PlaybackController { // check if its in [0.0 - 1.0] range volume = Math.max(0, Math.min(1, volume)) - var state = this.state + const state = this.state if (isCasting(state)) { Cast.setVolume(volume) } else { @@ -192,8 +192,8 @@ module.exports = class PlaybackController { // * The video is paused // * The video is playing remotely on Chromecast or Airplay showOrHidePlayerControls () { - var state = this.state - var hideControls = state.location.url() === 'player' && + const state = this.state + const hideControls = state.location.url() === 'player' && state.playing.mouseStationarySince !== 0 && new Date().getTime() - state.playing.mouseStationarySince > 2000 && !state.playing.isPaused && @@ -208,9 +208,8 @@ module.exports = class PlaybackController { // Opens the video player to a specific torrent openPlayer (infoHash, index, cb) { - var state = this.state - - var torrentSummary = TorrentSummary.getByKey(state, infoHash) + const state = this.state + const torrentSummary = TorrentSummary.getByKey(state, infoHash) if (index === undefined) index = torrentSummary.mostRecentFileIndex if (index === undefined) index = torrentSummary.files.findIndex(TorrentPlayer.isPlayable) @@ -224,7 +223,7 @@ module.exports = class PlaybackController { torrentSummary.playStatus = 'requested' this.update() - var timeout = setTimeout(() => { + const timeout = setTimeout(() => { telemetry.logPlayAttempt('timeout') // TODO: remove torrentSummary.playStatus torrentSummary.playStatus = 'timeout' /* no seeders available? */ @@ -237,7 +236,7 @@ module.exports = class PlaybackController { clearTimeout(timeout) // if we timed out (user clicked play a long time ago), don't autoplay - var timedOut = torrentSummary.playStatus === 'timeout' + const timedOut = torrentSummary.playStatus === 'timeout' delete torrentSummary.playStatus if (timedOut) { ipcRenderer.send('wt-stop-server') @@ -267,10 +266,10 @@ module.exports = class PlaybackController { // Called each time the current file changes updatePlayer (infoHash, index, resume, cb) { - var state = this.state + const state = this.state - var torrentSummary = TorrentSummary.getByKey(state, infoHash) - var fileSummary = torrentSummary.files[index] + const torrentSummary = TorrentSummary.getByKey(state, infoHash) + const fileSummary = torrentSummary.files[index] if (!TorrentPlayer.isPlayable(fileSummary)) { torrentSummary.mostRecentFileIndex = undefined @@ -280,16 +279,17 @@ module.exports = class PlaybackController { torrentSummary.mostRecentFileIndex = index // update state + state.playing.infoHash = infoHash state.playing.fileIndex = index state.playing.type = TorrentPlayer.isVideo(fileSummary) ? 'video' : TorrentPlayer.isAudio(fileSummary) ? 'audio' : 'other' // pick up where we left off - var jumpToTime = 0 + let jumpToTime = 0 if (resume && fileSummary.currentTime) { - var fraction = fileSummary.currentTime / fileSummary.duration - var secondsLeft = fileSummary.duration - fileSummary.currentTime + const fraction = fileSummary.currentTime / fileSummary.duration + const secondsLeft = fileSummary.duration - fileSummary.currentTime if (fraction < 0.9 && secondsLeft > 10) { jumpToTime = fileSummary.currentTime } @@ -330,7 +330,7 @@ module.exports = class PlaybackController { console.log('closePlayer') // Quit any external players, like Chromecast/Airplay/etc or VLC - var state = this.state + const state = this.state if (isCasting(state)) { Cast.stop() } @@ -342,7 +342,7 @@ module.exports = class PlaybackController { state.previousVolume = state.playing.volume // Telemetry: track what happens after the user clicks play - var result = state.playing.result // 'success' or 'error' + const result = state.playing.result // 'success' or 'error' if (result === 'success') telemetry.logPlayAttempt('success') // first frame displayed else if (result === 'error') telemetry.logPlayAttempt('error') // codec missing, etc else if (result === undefined) telemetry.logPlayAttempt('abandoned') // user gave up waiting diff --git a/src/renderer/controllers/prefs-controller.js b/src/renderer/controllers/prefs-controller.js index 97171c8ade..cf93dc2101 100644 --- a/src/renderer/controllers/prefs-controller.js +++ b/src/renderer/controllers/prefs-controller.js @@ -11,7 +11,7 @@ module.exports = class PrefsController { // Goes to the Preferences screen show () { - var state = this.state + const state = this.state state.location.go({ url: 'preferences', setup: function (cb) { @@ -32,20 +32,21 @@ module.exports = class PrefsController { // For example: updatePreferences('foo.bar', 'baz') // Call save() to save to config.json update (property, value) { - var path = property.split('.') - var key = this.state.unsaved.prefs - for (var i = 0; i < path.length - 1; i++) { - if (typeof key[path[i]] === 'undefined') { - key[path[i]] = {} + const path = property.split('.') + let obj = this.state.unsaved.prefs + let i + for (i = 0; i < path.length - 1; i++) { + if (typeof obj[path[i]] === 'undefined') { + obj[path[i]] = {} } - key = key[path[i]] + obj = obj[path[i]] } - key[path[i]] = value + obj[path[i]] = value } // All unsaved prefs take effect atomically, and are saved to config.json save () { - var state = this.state + const state = this.state if (state.unsaved.prefs.isFileHandler !== state.saved.prefs.isFileHandler) { ipcRenderer.send('setDefaultFileHandler', state.unsaved.prefs.isFileHandler) } diff --git a/src/renderer/controllers/subtitles-controller.js b/src/renderer/controllers/subtitles-controller.js index d67e433e23..727dc040e7 100644 --- a/src/renderer/controllers/subtitles-controller.js +++ b/src/renderer/controllers/subtitles-controller.js @@ -28,26 +28,26 @@ module.exports = class SubtitlesController { } toggleSubtitlesMenu () { - var subtitles = this.state.playing.subtitles + const subtitles = this.state.playing.subtitles subtitles.showMenu = !subtitles.showMenu } addSubtitles (files, autoSelect) { - var state = this.state + const state = this.state // Subtitles are only supported when playing video files if (state.playing.type !== 'video') return if (files.length === 0) return - var subtitles = state.playing.subtitles + const subtitles = state.playing.subtitles // Read the files concurrently, then add all resulting subtitle tracks - var tasks = files.map((file) => (cb) => loadSubtitle(file, cb)) + const tasks = files.map((file) => (cb) => loadSubtitle(file, cb)) parallel(tasks, function (err, tracks) { if (err) return dispatch('error', err) - for (var i = 0; i < tracks.length; i++) { + for (let i = 0; i < tracks.length; i++) { // No dupes allowed - var track = tracks[i] - var trackIndex = state.playing.subtitles.tracks + const track = tracks[i] + let trackIndex = state.playing.subtitles.tracks .findIndex((t) => track.filePath === t.filePath) // Add the track @@ -68,46 +68,46 @@ module.exports = class SubtitlesController { checkForSubtitles () { if (this.state.playing.type !== 'video') return - var torrentSummary = this.state.getPlayingTorrentSummary() + const torrentSummary = this.state.getPlayingTorrentSummary() if (!torrentSummary || !torrentSummary.progress) return torrentSummary.progress.files.forEach((fp, ix) => { if (fp.numPieces !== fp.numPiecesPresent) return // ignore incomplete files - var file = torrentSummary.files[ix] + const file = torrentSummary.files[ix] if (!this.isSubtitle(file.name)) return - var filePath = path.join(torrentSummary.path, file.path) + const filePath = path.join(torrentSummary.path, file.path) this.addSubtitles([filePath], false) }) } isSubtitle (file) { - var name = typeof file === 'string' ? file : file.name - var ext = path.extname(name).toLowerCase() + const name = typeof file === 'string' ? file : file.name + const ext = path.extname(name).toLowerCase() return ext === '.srt' || ext === '.vtt' } } function loadSubtitle (file, cb) { // Lazy load to keep startup fast - var concat = require('simple-concat') - var LanguageDetect = require('languagedetect') - var srtToVtt = require('srt-to-vtt') + const concat = require('simple-concat') + const LanguageDetect = require('languagedetect') + const srtToVtt = require('srt-to-vtt') // Read the .SRT or .VTT file, parse it, add subtitle track - var filePath = file.path || file + const filePath = file.path || file - var vttStream = fs.createReadStream(filePath).pipe(srtToVtt()) + const vttStream = fs.createReadStream(filePath).pipe(srtToVtt()) concat(vttStream, function (err, buf) { if (err) return dispatch('error', 'Can\'t parse subtitles file.') // Detect what language the subtitles are in - var vttContents = buf.toString().replace(/(.*-->.*)/g, '') - var langDetected = (new LanguageDetect()).detect(vttContents, 2) + const vttContents = buf.toString().replace(/(.*-->.*)/g, '') + let langDetected = (new LanguageDetect()).detect(vttContents, 2) langDetected = langDetected.length ? langDetected[0][0] : 'subtitle' langDetected = langDetected.slice(0, 1).toUpperCase() + langDetected.slice(1) - var track = { + const track = { buffer: 'data:text/vtt;base64,' + buf.toString('base64'), language: langDetected, label: langDetected, @@ -121,18 +121,18 @@ function loadSubtitle (file, cb) { // Checks whether a language name like 'English' or 'German' matches the system // language, aka the current locale function isSystemLanguage (language) { - var iso639 = require('iso-639-1') - var osLangISO = window.navigator.language.split('-')[0] // eg 'en' - var langIso = iso639.getCode(language) // eg 'de' if language is 'German' + const iso639 = require('iso-639-1') + const osLangISO = window.navigator.language.split('-')[0] // eg 'en' + const langIso = iso639.getCode(language) // eg 'de' if language is 'German' return langIso === osLangISO } // Make sure we don't have two subtitle tracks with the same label // Labels each track by language, eg 'German', 'English', 'English 2', ... function relabelSubtitles (subtitles) { - var counts = {} + const counts = {} subtitles.tracks.forEach(function (track) { - var lang = track.language + const lang = track.language counts[lang] = (counts[lang] || 0) + 1 track.label = counts[lang] > 1 ? (lang + ' ' + counts[lang]) : lang }) diff --git a/src/renderer/controllers/torrent-controller.js b/src/renderer/controllers/torrent-controller.js index 90aec3c4d6..d75ad54776 100644 --- a/src/renderer/controllers/torrent-controller.js +++ b/src/renderer/controllers/torrent-controller.js @@ -11,12 +11,12 @@ module.exports = class TorrentController { } torrentInfoHash (torrentKey, infoHash) { - var torrentSummary = this.getTorrentSummary(torrentKey) + let torrentSummary = this.getTorrentSummary(torrentKey) console.log('got infohash for %s torrent %s', torrentSummary ? 'existing' : 'new', torrentKey) if (!torrentSummary) { - var torrents = this.state.saved.torrents + const torrents = this.state.saved.torrents // Check if an existing (non-active) torrent has the same info hash if (torrents.find((t) => t.infoHash === infoHash)) { @@ -48,7 +48,7 @@ module.exports = class TorrentController { } dispatch('error', message) - var torrentSummary = this.getTorrentSummary(torrentKey) + const torrentSummary = this.getTorrentSummary(torrentKey) if (torrentSummary) { console.log('Pausing torrent %s due to error: %s', torrentSummary.infoHash, message) torrentSummary.status = 'paused' @@ -58,14 +58,14 @@ module.exports = class TorrentController { torrentMetadata (torrentKey, torrentInfo) { // Summarize torrent - var torrentSummary = this.getTorrentSummary(torrentKey) + const torrentSummary = this.getTorrentSummary(torrentKey) torrentSummary.status = 'downloading' torrentSummary.name = torrentSummary.displayName || torrentInfo.name torrentSummary.path = torrentInfo.path torrentSummary.magnetURI = torrentInfo.magnetURI // TODO: make torrentInfo immutable, save separately as torrentSummary.info // For now, check whether torrentSummary.files has already been set: - var hasDetailedFileInfo = torrentSummary.files && torrentSummary.files[0].path + const hasDetailedFileInfo = torrentSummary.files && torrentSummary.files[0].path if (!hasDetailedFileInfo) { torrentSummary.files = torrentInfo.files } @@ -83,7 +83,7 @@ module.exports = class TorrentController { torrentDone (torrentKey, torrentInfo) { // Update the torrent summary - var torrentSummary = this.getTorrentSummary(torrentKey) + const torrentSummary = this.getTorrentSummary(torrentKey) torrentSummary.status = 'seeding' // Notify the user that a torrent finished, but only if we actually DL'd at least part of it. @@ -100,22 +100,18 @@ module.exports = class TorrentController { } torrentProgress (progressInfo) { - // Overall progress across all active torrents, 0 to 1 - var progress = progressInfo.progress - var hasActiveTorrents = progressInfo.hasActiveTorrents - + // Overall progress across all active torrents, 0 to 1, or -1 to hide the progress bar // Hide progress bar when client has no torrents, or progress is 100% - // TODO: isn't this equivalent to: if (progress === 1) ? - if (!hasActiveTorrents || progress === 1) { - progress = -1 - } + const progress = (!progressInfo.hasActiveTorrents || progressInfo.progress === 1) + ? -1 + : progressInfo.progress // Show progress bar under the WebTorrent taskbar icon, on OSX this.state.dock.progress = progress // Update progress for each individual torrent progressInfo.torrents.forEach((p) => { - var torrentSummary = this.getTorrentSummary(p.torrentKey) + const torrentSummary = this.getTorrentSummary(p.torrentKey) if (!torrentSummary) { console.log('warning: got progress for missing torrent %s', p.torrentKey) return @@ -130,27 +126,27 @@ module.exports = class TorrentController { } torrentFileModtimes (torrentKey, fileModtimes) { - var torrentSummary = this.getTorrentSummary(torrentKey) + const torrentSummary = this.getTorrentSummary(torrentKey) torrentSummary.fileModtimes = fileModtimes dispatch('saveStateThrottled') } torrentFileSaved (torrentKey, torrentFileName) { console.log('torrent file saved %s: %s', torrentKey, torrentFileName) - var torrentSummary = this.getTorrentSummary(torrentKey) + const torrentSummary = this.getTorrentSummary(torrentKey) torrentSummary.torrentFileName = torrentFileName dispatch('saveStateThrottled') } torrentPosterSaved (torrentKey, posterFileName) { - var torrentSummary = this.getTorrentSummary(torrentKey) + const torrentSummary = this.getTorrentSummary(torrentKey) torrentSummary.posterFileName = posterFileName dispatch('saveStateThrottled') } torrentAudioMetadata (infoHash, index, info) { - var torrentSummary = this.getTorrentSummary(infoHash) - var fileSummary = torrentSummary.files[index] + const torrentSummary = this.getTorrentSummary(infoHash) + const fileSummary = torrentSummary.files[index] fileSummary.audioInfo = info dispatch('update') } @@ -167,7 +163,7 @@ module.exports = class TorrentController { } function getTorrentPath (torrentSummary) { - var itemPath = TorrentSummary.getFileOrFolder(torrentSummary) + let itemPath = TorrentSummary.getFileOrFolder(torrentSummary) if (torrentSummary.files.length > 1) { itemPath = path.dirname(itemPath) } @@ -175,7 +171,7 @@ function getTorrentPath (torrentSummary) { } function showDoneNotification (torrent) { - var notif = new window.Notification('Download Complete', { + const notif = new window.Notification('Download Complete', { body: torrent.name, silent: true }) diff --git a/src/renderer/controllers/torrent-list-controller.js b/src/renderer/controllers/torrent-list-controller.js index 8ca3f0f1f0..7b310b2619 100644 --- a/src/renderer/controllers/torrent-list-controller.js +++ b/src/renderer/controllers/torrent-list-controller.js @@ -30,8 +30,8 @@ module.exports = class TorrentListController { torrentId = torrentId.slice(torrentId.indexOf('#') + 1) } - var torrentKey = this.state.nextTorrentKey++ - var path = this.state.saved.prefs.downloadPath + const torrentKey = this.state.nextTorrentKey++ + const path = this.state.saved.prefs.downloadPath ipcRenderer.send('wt-start-torrenting', torrentKey, torrentId, path) @@ -66,15 +66,15 @@ module.exports = class TorrentListController { // Creates a new torrent and start seeeding createTorrent (options) { - var state = this.state - var torrentKey = state.nextTorrentKey++ + const state = this.state + const torrentKey = state.nextTorrentKey++ ipcRenderer.send('wt-create-torrent', torrentKey, options) state.location.cancel() } // Starts downloading and/or seeding a given torrentSummary. startTorrentingSummary (torrentKey) { - var s = TorrentSummary.getByKey(this.state, torrentKey) + const s = TorrentSummary.getByKey(this.state, torrentKey) if (!s) throw new Error('Missing key: ' + torrentKey) // New torrent: give it a path @@ -84,7 +84,7 @@ module.exports = class TorrentListController { return start() } - var fileOrFolder = TorrentSummary.getFileOrFolder(s) + const fileOrFolder = TorrentSummary.getFileOrFolder(s) // New torrent: metadata not yet received if (!fileOrFolder) return start() @@ -110,7 +110,7 @@ module.exports = class TorrentListController { // TODO: use torrentKey, not infoHash toggleTorrent (infoHash) { - var torrentSummary = TorrentSummary.getByKey(this.state, infoHash) + const torrentSummary = TorrentSummary.getByKey(this.state, infoHash) if (torrentSummary.status === 'paused') { torrentSummary.status = 'new' this.startTorrentingSummary(torrentSummary.torrentKey) @@ -123,7 +123,7 @@ module.exports = class TorrentListController { } toggleTorrentFile (infoHash, index) { - var torrentSummary = TorrentSummary.getByKey(this.state, infoHash) + const torrentSummary = TorrentSummary.getByKey(this.state, infoHash) torrentSummary.selections[index] = !torrentSummary.selections[index] // Let the WebTorrent process know to start or stop fetching that file @@ -142,10 +142,10 @@ module.exports = class TorrentListController { deleteTorrent (infoHash, deleteData) { ipcRenderer.send('wt-stop-torrenting', infoHash) - var index = this.state.saved.torrents.findIndex((x) => x.infoHash === infoHash) + const index = this.state.saved.torrents.findIndex((x) => x.infoHash === infoHash) if (index > -1) { - var summary = this.state.saved.torrents[index] + const summary = this.state.saved.torrents[index] // remove torrent and poster file deleteFile(TorrentSummary.getTorrentPath(summary)) @@ -173,8 +173,8 @@ module.exports = class TorrentListController { } openTorrentContextMenu (infoHash) { - var torrentSummary = TorrentSummary.getByKey(this.state, infoHash) - var menu = new electron.remote.Menu() + const torrentSummary = TorrentSummary.getByKey(this.state, infoHash) + const menu = new electron.remote.Menu() menu.append(new electron.remote.MenuItem({ label: 'Remove From List', @@ -223,11 +223,11 @@ module.exports = class TorrentListController { // Calls `cb` on success, calls `onError` on failure function findFilesRecursive (paths, cb) { if (paths.length > 1) { - var numComplete = 0 - var ret = [] + let numComplete = 0 + let ret = [] paths.forEach(function (path) { findFilesRecursive([path], function (fileObjs) { - ret = ret.concat(fileObjs) + ret.push(...fileObjs) if (++numComplete === paths.length) { ret.sort((a, b) => a.path < b.path ? -1 : a.path > b.path) cb(ret) @@ -237,13 +237,13 @@ function findFilesRecursive (paths, cb) { return } - var fileOrFolder = paths[0] + const fileOrFolder = paths[0] fs.stat(fileOrFolder, function (err, stat) { if (err) return dispatch('error', err) // Files: return name, path, and size if (!stat.isDirectory()) { - var filePath = fileOrFolder + const filePath = fileOrFolder return cb([{ name: path.basename(filePath), path: filePath, @@ -252,10 +252,10 @@ function findFilesRecursive (paths, cb) { } // Folders: recurse, make a list of all the files - var folderPath = fileOrFolder + const folderPath = fileOrFolder fs.readdir(folderPath, function (err, fileNames) { if (err) return dispatch('error', err) - var paths = fileNames.map((fileName) => path.join(folderPath, fileName)) + const paths = fileNames.map((fileName) => path.join(folderPath, fileName)) findFilesRecursive(paths, cb) }) }) @@ -270,7 +270,7 @@ function deleteFile (path) { // Delete all files in a torrent function moveItemToTrash (torrentSummary) { - var filePath = TorrentSummary.getFileOrFolder(torrentSummary) + const filePath = TorrentSummary.getFileOrFolder(torrentSummary) if (filePath) ipcRenderer.send('moveItemToTrash', filePath) } @@ -279,9 +279,9 @@ function showItemInFolder (torrentSummary) { } function saveTorrentFileAs (torrentSummary) { - var downloadPath = this.state.saved.prefs.downloadPath - var newFileName = path.parse(torrentSummary.name).name + '.torrent' - var opts = { + const downloadPath = this.state.saved.prefs.downloadPath + const newFileName = path.parse(torrentSummary.name).name + '.torrent' + const opts = { title: 'Save Torrent File', defaultPath: path.join(downloadPath, newFileName), filters: [ @@ -289,10 +289,10 @@ function saveTorrentFileAs (torrentSummary) { { name: 'All Files', extensions: ['*'] } ] } - var win = electron.remote.getCurrentWindow() + const win = electron.remote.getCurrentWindow() electron.remote.dialog.showSaveDialog(win, opts, function (savePath) { if (!savePath) return // They clicked Cancel - var torrentPath = TorrentSummary.getTorrentPath(torrentSummary) + const torrentPath = TorrentSummary.getTorrentPath(torrentSummary) fs.readFile(torrentPath, function (err, torrentFile) { if (err) return dispatch('error', err) fs.writeFile(savePath, torrentFile, function (err) { diff --git a/src/renderer/controllers/update-controller.js b/src/renderer/controllers/update-controller.js index 5f608c459f..a5fd3d74a0 100644 --- a/src/renderer/controllers/update-controller.js +++ b/src/renderer/controllers/update-controller.js @@ -8,7 +8,7 @@ module.exports = class UpdateController { // Shows a modal saying that we have an update updateAvailable (version) { - var skipped = this.state.saved.skippedVersions + const skipped = this.state.saved.skippedVersions if (skipped && skipped.includes(version)) { console.log('new version skipped by user: v' + version) return @@ -18,7 +18,7 @@ module.exports = class UpdateController { // Don't show the modal again until the next version skipVersion (version) { - var skipped = this.state.saved.skippedVersions + let skipped = this.state.saved.skippedVersions if (!skipped) skipped = this.state.saved.skippedVersions = [] skipped.push(version) State.saveThrottled(this.state) diff --git a/src/renderer/lib/capture-video-frame.js b/src/renderer/lib/capture-video-frame.js index 7f0fc92fd0..b6a046740e 100644 --- a/src/renderer/lib/capture-video-frame.js +++ b/src/renderer/lib/capture-video-frame.js @@ -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') } diff --git a/src/renderer/lib/cast.js b/src/renderer/lib/cast.js index 8b07cf6b77..9cb9c6d7f4 100644 --- a/src/renderer/lib/cast.js +++ b/src/renderer/lib/cast.js @@ -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) } diff --git a/src/renderer/lib/dispatcher.js b/src/renderer/lib/dispatcher.js index a17f1a5cb0..1b6cd23d11 100644 --- a/src/renderer/lib/dispatcher.js +++ b/src/renderer/lib/dispatcher.js @@ -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 diff --git a/src/renderer/lib/migrations.js b/src/renderer/lib/migrations.js index 67975e3714..517902d81e 100644 --- a/src/renderer/lib/migrations.js +++ b/src/renderer/lib/migrations.js @@ -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) diff --git a/src/renderer/lib/playlist.js b/src/renderer/lib/playlist.js index d2e6a500e9..35d9db0371 100644 --- a/src/renderer/lib/playlist.js +++ b/src/renderer/lib/playlist.js @@ -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 } diff --git a/src/renderer/lib/sound.js b/src/renderer/lib/sound.js index d63ad46ca7..b80375d5c0 100644 --- a/src/renderer/lib/sound.js +++ b/src/renderer/lib/sound.js @@ -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') } diff --git a/src/renderer/lib/state.js b/src/renderer/lib/state.js index d366f61965..07bf8e9f18 100644 --- a/src/renderer/lib/state.js +++ b/src/renderer/lib/state.js @@ -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 } diff --git a/src/renderer/lib/telemetry.js b/src/renderer/lib/telemetry.js index c20be6de53..14a5cfef4a 100644 --- a/src/renderer/lib/telemetry.js +++ b/src/renderer/lib/telemetry.js @@ -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 } diff --git a/src/renderer/lib/torrent-player.js b/src/renderer/lib/torrent-player.js index d3ecceedcc..1be19e32ca 100644 --- a/src/renderer/lib/torrent-player.js +++ b/src/renderer/lib/torrent-player.js @@ -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() } diff --git a/src/renderer/lib/torrent-poster.js b/src/renderer/lib/torrent-poster.js index 3998072c24..feb59fabf3 100644 --- a/src/renderer/lib/torrent-poster.js +++ b/src/renderer/lib/torrent-poster.js @@ -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