core rework
This commit is contained in:
@@ -17,19 +17,24 @@ const download = (socket, url) => {
|
||||
const ytldp = spawn(`./lib/yt-dlp${isWindows ? '.exe' : ''}`,
|
||||
['-o', `${settings.download_path || 'downloads/'}%(title)s.%(ext)s`, url]
|
||||
)
|
||||
ytldp.stdout.on('data', data => {
|
||||
// reactive programming magic
|
||||
from(Promise.resolve(data)) // stout as promise => Observable
|
||||
.pipe(throttle(() => interval(500))) // discard events closer than 500ms
|
||||
.subscribe({
|
||||
next: () => {
|
||||
socket.emit('progress', data.toString()) // finally, emit
|
||||
logger('download', `Fetching ${data.toString()}`)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
from(ytldp.stdout) // stout as observable
|
||||
.pipe(throttle(() => interval(500))) // discard events closer than 500ms
|
||||
.subscribe({
|
||||
next: (stdout) => {
|
||||
let _stdout = String(stdout)
|
||||
socket.emit('progress', formatter(_stdout)) // finally, emit
|
||||
//logger('download', `Fetching ${stdout}`)
|
||||
console.log(formatter(_stdout))
|
||||
},
|
||||
complete: () => {
|
||||
socket.emit('progress', { status: 'Done!' })
|
||||
logger('download', 'Done!')
|
||||
}
|
||||
})
|
||||
|
||||
ytldp.on('exit', () => {
|
||||
socket.emit('progress', 'Done!')
|
||||
socket.emit('progress', { status: 'Done!' })
|
||||
logger('download', 'Done!')
|
||||
})
|
||||
}
|
||||
@@ -45,6 +50,30 @@ const abortDownload = (socket) => {
|
||||
logger('download', 'Aborted')
|
||||
}
|
||||
|
||||
const formatter = (stdout) => {
|
||||
const cleanStdout = stdout
|
||||
.replace(/\s\s+/g, ' ')
|
||||
.split(' ')
|
||||
const status = cleanStdout[0].replace(/\[|\]|\r/g, '')
|
||||
switch (status) {
|
||||
case 'download':
|
||||
return {
|
||||
status: cleanStdout[0].replace(/\[|\]|\r/g, ''),
|
||||
progress: cleanStdout[1],
|
||||
size: cleanStdout[3],
|
||||
dlSpeed: cleanStdout[5],
|
||||
}
|
||||
case 'merger':
|
||||
return {
|
||||
status: 'merging',
|
||||
progress: '100',
|
||||
}
|
||||
default:
|
||||
return { progress: '0' }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
download: download,
|
||||
abortDownload: abortDownload
|
||||
|
||||
Reference in New Issue
Block a user