fix: modernify code (#2068)
* fix: modernify code * standard fix * fixes
This commit is contained in:
committed by
GitHub
parent
c36e43eaa3
commit
e42a515199
@@ -54,17 +54,17 @@ function init (appState, callback) {
|
||||
state.devices.airplay = airplayPlayer()
|
||||
|
||||
// Listen for devices: Chromecast, DLNA and Airplay
|
||||
chromecasts.on('update', function (device) {
|
||||
chromecasts.on('update', device => {
|
||||
// TODO: how do we tell if there are *no longer* any Chromecasts available?
|
||||
// From looking at the code, chromecasts.players only grows, never shrinks
|
||||
state.devices.chromecast.addDevice(device)
|
||||
})
|
||||
|
||||
dlnacasts.on('update', function (device) {
|
||||
dlnacasts.on('update', device => {
|
||||
state.devices.dlna.addDevice(device)
|
||||
})
|
||||
|
||||
airplayer.on('update', function (device) {
|
||||
airplayer.on('update', device => {
|
||||
state.devices.airplay.addDevice(device)
|
||||
})
|
||||
}
|
||||
@@ -116,7 +116,7 @@ function chromecastPlayer () {
|
||||
}
|
||||
|
||||
function addDevice (device) {
|
||||
device.on('error', function (err) {
|
||||
device.on('error', err => {
|
||||
if (device !== ret.device) return
|
||||
state.playing.location = 'local'
|
||||
state.errors.push({
|
||||
@@ -125,7 +125,7 @@ function chromecastPlayer () {
|
||||
})
|
||||
update()
|
||||
})
|
||||
device.on('disconnect', function () {
|
||||
device.on('disconnect', () => {
|
||||
if (device !== ret.device) return
|
||||
state.playing.location = 'local'
|
||||
update()
|
||||
@@ -145,7 +145,7 @@ function chromecastPlayer () {
|
||||
'Transfer-Encoding': 'chunked'
|
||||
})
|
||||
res.end(Buffer.from(selectedSubtitle.buffer.substr(21), 'base64'))
|
||||
}).listen(0, function () {
|
||||
}).listen(0, () => {
|
||||
const port = ret.subServer.address().port
|
||||
const subtitlesUrl = 'http://' + state.server.networkAddress + ':' + port + '/'
|
||||
callback(subtitlesUrl)
|
||||
@@ -155,13 +155,13 @@ function chromecastPlayer () {
|
||||
|
||||
function open () {
|
||||
const torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
|
||||
serveSubtitles(function (subtitlesUrl) {
|
||||
serveSubtitles(subtitlesUrl => {
|
||||
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, {
|
||||
type: 'video/mp4',
|
||||
title: config.APP_NAME + ' - ' + torrentSummary.name,
|
||||
subtitles: subtitlesUrl ? [subtitlesUrl] : [],
|
||||
autoSubtitles: !!subtitlesUrl
|
||||
}, function (err) {
|
||||
}, err => {
|
||||
if (err) {
|
||||
state.playing.location = 'local'
|
||||
state.errors.push({
|
||||
@@ -221,7 +221,7 @@ function airplayPlayer () {
|
||||
return ret
|
||||
|
||||
function addDevice (player) {
|
||||
player.on('event', function (event) {
|
||||
player.on('event', event => {
|
||||
switch (event.state) {
|
||||
case 'loading':
|
||||
break
|
||||
@@ -243,7 +243,7 @@ function airplayPlayer () {
|
||||
}
|
||||
|
||||
function open () {
|
||||
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, function (err, res) {
|
||||
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, (err, res) => {
|
||||
if (err) {
|
||||
state.playing.location = 'local'
|
||||
state.errors.push({
|
||||
@@ -270,7 +270,7 @@ function airplayPlayer () {
|
||||
}
|
||||
|
||||
function status () {
|
||||
ret.device.playbackInfo(function (err, res, status) {
|
||||
ret.device.playbackInfo((err, res, status) => {
|
||||
if (err) {
|
||||
state.playing.location = 'local'
|
||||
state.errors.push({
|
||||
@@ -317,7 +317,7 @@ function dlnaPlayer (player) {
|
||||
}
|
||||
|
||||
function addDevice (device) {
|
||||
device.on('error', function (err) {
|
||||
device.on('error', err => {
|
||||
if (device !== ret.device) return
|
||||
state.playing.location = 'local'
|
||||
state.errors.push({
|
||||
@@ -326,7 +326,7 @@ function dlnaPlayer (player) {
|
||||
})
|
||||
update()
|
||||
})
|
||||
device.on('disconnect', function () {
|
||||
device.on('disconnect', () => {
|
||||
if (device !== ret.device) return
|
||||
state.playing.location = 'local'
|
||||
update()
|
||||
@@ -339,7 +339,7 @@ function dlnaPlayer (player) {
|
||||
type: 'video/mp4',
|
||||
title: config.APP_NAME + ' - ' + torrentSummary.name,
|
||||
seek: state.playing.currentTime > 10 ? state.playing.currentTime : 0
|
||||
}, function (err) {
|
||||
}, err => {
|
||||
if (err) {
|
||||
state.playing.location = 'local'
|
||||
state.errors.push({
|
||||
@@ -374,7 +374,7 @@ function dlnaPlayer (player) {
|
||||
}
|
||||
|
||||
function volume (volume, callback) {
|
||||
ret.device.volume(volume, function (err) {
|
||||
ret.device.volume(volume, err => {
|
||||
// quick volume update
|
||||
state.playing.volume = volume
|
||||
callback(err)
|
||||
@@ -396,7 +396,7 @@ function handleStatus (err, status) {
|
||||
|
||||
// Start polling cast device state, whenever we're connected
|
||||
function startStatusInterval () {
|
||||
statusInterval = setInterval(function () {
|
||||
statusInterval = setInterval(() => {
|
||||
const player = getPlayer()
|
||||
if (player) player.status()
|
||||
}, 1000)
|
||||
@@ -454,7 +454,7 @@ function selectDevice (index) {
|
||||
function stop () {
|
||||
const player = getPlayer()
|
||||
if (player) {
|
||||
player.stop(function () {
|
||||
player.stop(() => {
|
||||
player.device = null
|
||||
stoppedCasting()
|
||||
})
|
||||
@@ -522,6 +522,6 @@ function setVolume (volume) {
|
||||
if (player) player.volume(volume, castCallback)
|
||||
}
|
||||
|
||||
function castCallback () {
|
||||
console.log('%s callback: %o', state.playing.location, arguments)
|
||||
function castCallback (...args) {
|
||||
console.log('%s callback: %o', state.playing.location, args)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ module.exports = {
|
||||
}
|
||||
|
||||
const dispatchers = {}
|
||||
let _dispatch = function () {}
|
||||
let _dispatch = () => {}
|
||||
|
||||
function setDispatch (dispatch) {
|
||||
_dispatch = dispatch
|
||||
@@ -23,7 +23,7 @@ function dispatcher (...args) {
|
||||
const str = JSON.stringify(args)
|
||||
let handler = dispatchers[str]
|
||||
if (!handler) {
|
||||
handler = dispatchers[str] = function (e) {
|
||||
handler = dispatchers[str] = e => {
|
||||
// Do not propagate click to elements below the button
|
||||
e.stopPropagation()
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ function migrate_0_7_0 (saved) {
|
||||
const { copyFileSync } = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
saved.torrents.forEach(function (ts) {
|
||||
saved.torrents.forEach(ts => {
|
||||
const infoHash = ts.infoHash
|
||||
|
||||
// Replace torrentPath with torrentFileName
|
||||
@@ -134,7 +134,7 @@ function migrate_0_12_0 (saved) {
|
||||
'02767050e0be2fd4db9a2ad6c12416ac806ed6ed.torrent',
|
||||
'3ba219a8634bf7bae3d848192b2da75ae995589d.torrent'
|
||||
]
|
||||
saved.torrents.forEach(function (torrentSummary) {
|
||||
saved.torrents.forEach(torrentSummary => {
|
||||
if (!defaultTorrentFiles.includes(torrentSummary.torrentFileName)) return
|
||||
const fileOrFolder = TorrentSummary.getFileOrFolder(torrentSummary)
|
||||
if (!fileOrFolder) return
|
||||
@@ -148,16 +148,16 @@ function migrate_0_12_0 (saved) {
|
||||
}
|
||||
|
||||
function migrate_0_14_0 (saved) {
|
||||
saved.torrents.forEach(function (ts) {
|
||||
saved.torrents.forEach(ts => {
|
||||
delete ts.defaultPlayFileIndex
|
||||
})
|
||||
}
|
||||
|
||||
function migrate_0_17_0 (saved) {
|
||||
// Fix a sad, sad bug that resulted in 100MB+ config.json files
|
||||
saved.torrents.forEach(function (ts) {
|
||||
saved.torrents.forEach(ts => {
|
||||
if (!ts.files) return
|
||||
ts.files.forEach(function (file) {
|
||||
ts.files.forEach(file => {
|
||||
if (!file.audioInfo || !file.audioInfo.picture) return
|
||||
// This contained a Buffer, which 30x'd in size when serialized to JSON
|
||||
delete file.audioInfo.picture
|
||||
@@ -179,9 +179,7 @@ function migrate_0_17_2 (saved) {
|
||||
const OLD_HASH = '3ba219a8634bf7bae3d848192b2da75ae995589d'
|
||||
const NEW_HASH = 'a88fda5954e89178c372716a6a78b8180ed4dad3'
|
||||
|
||||
const ts = saved.torrents.find((ts) => {
|
||||
return ts.infoHash === OLD_HASH
|
||||
})
|
||||
const ts = saved.torrents.find(ts => ts.infoHash === OLD_HASH)
|
||||
|
||||
if (!ts) return // Wired CD torrent does not exist
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@ const State = module.exports = Object.assign(new EventEmitter(), {
|
||||
getDefaultPlayState,
|
||||
load,
|
||||
// state.save() calls are rate-limited. Use state.saveImmediate() to skip limit.
|
||||
save: function () {
|
||||
save (...args) {
|
||||
// Perf optimization: Lazy-require debounce (and it's dependencies)
|
||||
const debounce = require('debounce')
|
||||
// After first State.save() invokation, future calls go straight to the
|
||||
// debounced function
|
||||
State.save = debounce(saveImmediate, SAVE_DEBOUNCE_INTERVAL)
|
||||
State.save(...arguments)
|
||||
State.save(...args)
|
||||
},
|
||||
saveImmediate
|
||||
})
|
||||
@@ -242,7 +242,7 @@ async function saveImmediate (state, cb) {
|
||||
// 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) {
|
||||
.map(x => {
|
||||
const torrent = {}
|
||||
for (const key in x) {
|
||||
if (key === 'progress' || key === 'torrentKey') {
|
||||
|
||||
@@ -50,7 +50,7 @@ function send (state) {
|
||||
json: true
|
||||
}
|
||||
|
||||
get.post(opts, function (err, res) {
|
||||
get.post(opts, (err, res) => {
|
||||
if (err) return console.error('Error sending telemetry', err)
|
||||
if (res.statusCode !== 200) {
|
||||
return console.error(`Error sending telemetry, status code: ${res.statusCode}`)
|
||||
@@ -106,15 +106,14 @@ function getTorrentStats (state) {
|
||||
}
|
||||
|
||||
// First, count torrents & total file size
|
||||
for (let i = 0; i < count; i++) {
|
||||
const t = state.saved.torrents[i]
|
||||
const stat = byStatus[t.status]
|
||||
if (!t || !t.files || !stat) continue
|
||||
for (const torrent of state.saved.torrents) {
|
||||
const stat = byStatus[torrent.status]
|
||||
if (!torrent || !torrent.files || !stat) continue
|
||||
stat.count++
|
||||
for (let j = 0; j < t.files.length; j++) {
|
||||
const f = t.files[j]
|
||||
if (!f || !f.length) continue
|
||||
const fileSizeMB = f.length / (1 << 20)
|
||||
|
||||
for (const file of torrent.files) {
|
||||
if (!file || !file.length) continue
|
||||
const fileSizeMB = file.length / (1 << 20)
|
||||
sizeMB += fileSizeMB
|
||||
stat.sizeMB += fileSizeMB
|
||||
}
|
||||
@@ -145,7 +144,7 @@ function roundPow2 (n) {
|
||||
if (n <= 0) return 0
|
||||
// Otherwise, return 1, 2, 4, 8, etc by rounding in log space
|
||||
const log2 = Math.log(n) / Math.log(2)
|
||||
return Math.pow(2, Math.round(log2))
|
||||
return 2 ** Math.round(log2)
|
||||
}
|
||||
|
||||
// An uncaught error happened in the main process or in one of the windows
|
||||
|
||||
@@ -9,20 +9,14 @@ const msgNoSuitablePoster = 'Cannot generate a poster from any files in the torr
|
||||
|
||||
function torrentPoster (torrent, cb) {
|
||||
// First, try to use a poster image if available
|
||||
const posterFile = torrent.files.filter(function (file) {
|
||||
return /^poster\.(jpg|png|gif)$/.test(file.name)
|
||||
})[0]
|
||||
const posterFile = torrent.files.filter(file => /^poster\.(jpg|png|gif)$/.test(file.name))[0]
|
||||
if (posterFile) return extractPoster(posterFile, cb)
|
||||
|
||||
// 'score' each media type based on total size present in torrent
|
||||
const bestScore = ['audio', 'video', 'image'].map(mediaType => {
|
||||
return {
|
||||
type: mediaType,
|
||||
size: calculateDataLengthByExtension(torrent, mediaExtensions[mediaType])
|
||||
}
|
||||
}).sort((a, b) => { // sort descending on size
|
||||
return b.size - a.size
|
||||
})[0]
|
||||
const bestScore = ['audio', 'video', 'image'].map(mediaType => ({
|
||||
type: mediaType,
|
||||
size: calculateDataLengthByExtension(torrent, mediaExtensions[mediaType])
|
||||
})).sort((a, b) => b.size - a.size)[0] // sort descending on size
|
||||
|
||||
if (bestScore.size === 0) {
|
||||
// Admit defeat, no video, audio or image had a significant presence
|
||||
@@ -51,9 +45,7 @@ function calculateDataLengthByExtension (torrent, extensions) {
|
||||
if (files.length === 0) return 0
|
||||
return files
|
||||
.map(file => file.length)
|
||||
.reduce((a, b) => {
|
||||
return a + b
|
||||
})
|
||||
.reduce((a, b) => a + b)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,9 +57,7 @@ function calculateDataLengthByExtension (torrent, extensions) {
|
||||
function getLargestFileByExtension (torrent, extensions) {
|
||||
const files = filterOnExtension(torrent, extensions)
|
||||
if (files.length === 0) return undefined
|
||||
return files.reduce((a, b) => {
|
||||
return a.length > b.length ? a : b
|
||||
})
|
||||
return files.reduce((a, b) => a.length > b.length ? a : b)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,12 +105,10 @@ function torrentPosterFromAudio (torrent, cb) {
|
||||
|
||||
if (imageFiles.length === 0) return cb(new Error(msgNoSuitablePoster))
|
||||
|
||||
const bestCover = imageFiles.map(file => {
|
||||
return {
|
||||
file,
|
||||
score: scoreAudioCoverFile(file)
|
||||
}
|
||||
}).reduce((a, b) => {
|
||||
const bestCover = imageFiles.map(file => ({
|
||||
file,
|
||||
score: scoreAudioCoverFile(file)
|
||||
})).reduce((a, b) => {
|
||||
if (a.score > b.score) {
|
||||
return a
|
||||
}
|
||||
@@ -190,5 +178,5 @@ function torrentPosterFromImage (torrent, cb) {
|
||||
|
||||
function extractPoster (file, cb) {
|
||||
const extname = path.extname(file.name)
|
||||
file.getBuffer((err, buf) => { return cb(err, buf, extname) })
|
||||
file.getBuffer((err, buf) => cb(err, buf, extname))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user