diff --git a/frontend/src/Archived.tsx b/frontend/src/Archived.tsx index 424d3e3..722188e 100644 --- a/frontend/src/Archived.tsx +++ b/frontend/src/Archived.tsx @@ -25,7 +25,7 @@ export default function archivedDownloads() { > - { + {/* archived.length > 0 ? { @@ -40,7 +40,7 @@ export default function archivedDownloads() { } : null - } + */} ); } \ No newline at end of file diff --git a/frontend/src/Settings.tsx b/frontend/src/Settings.tsx index 05feb71..7330ee1 100644 --- a/frontend/src/Settings.tsx +++ b/frontend/src/Settings.tsx @@ -40,7 +40,7 @@ export default function Settings({ socket }: Props) { /** * Update the server ip address state and localstorage whenever the input value changes. * Validate the ip-addr then set.s - * @param e Input change event + * @param event Input change event */ const handleAddrChange = (event: any) => { const $serverAddr = of(event) diff --git a/server/src/core/Process.ts b/server/src/core/Process.ts index 89ad016..666886c 100644 --- a/server/src/core/Process.ts +++ b/server/src/core/Process.ts @@ -15,13 +15,11 @@ const log = Logger.instance; */ class Process { - private url: string; - private params: Array; + public readonly url: string; + public readonly params: Array; private settings: ISettings; private stdout: Readable; private pid: number; - private info: any; - private lock: boolean; private exePath = join(__dirname, 'yt-dlp'); constructor(url: string, params: Array, settings: any) { @@ -30,7 +28,6 @@ class Process { this.settings = settings this.stdout = undefined; this.pid = undefined; - this.info = null; } /** @@ -73,8 +70,6 @@ class Process { try { const buffer = Buffer.concat(stdoutChunks); const json = JSON.parse(buffer.toString()); - this.info = json; - this.lock = false; resolve({ formats: json.formats.map((format: IDownloadInfoSection) => { return { diff --git a/server/src/core/downloader.ts b/server/src/core/downloader.ts index 64b0575..4d2825e 100644 --- a/server/src/core/downloader.ts +++ b/server/src/core/downloader.ts @@ -1,6 +1,6 @@ import { spawn } from 'child_process'; import { from, interval } from 'rxjs'; -import { throttle } from 'rxjs/operators'; +import { map, throttle } from 'rxjs/operators'; import { killProcess } from '../utils/procUtils'; import { Socket } from 'socket.io'; import { IPayload } from '../interfaces/IPayload'; @@ -57,18 +57,22 @@ export async function download(socket: Socket, payload: IPayload) { p.start().then(downloader => { pool.add(p) - let pid = downloader.getPid(); + const pid = downloader.getPid(); p.getInfo().then(info => { - socket.emit('info', { pid: pid, info: info }); + socket.emit('info', { + pid: pid, + info: info + }); }); - from(downloader.getStdout()) // stdout as observable - .pipe(throttle(() => interval(500))) // discard events closer than 500ms + from(downloader.getStdout()) // stdout as observable + .pipe( + throttle(() => interval(500)), // discard events closer than 500ms + map(stdout => formatter(String(stdout), pid)) + ) .subscribe({ - next: (stdout) => { - socket.emit('progress', formatter(String(stdout), pid)) - }, + next: (stdout) => socket.emit('progress', stdout), complete: () => { downloader.kill().then(() => { socket.emit('progress', { @@ -82,6 +86,7 @@ export async function download(socket: Socket, payload: IPayload) { socket.emit('progress', { status: 'Done!', pid: pid }); + pool.remove(downloader); } }); }); @@ -118,7 +123,7 @@ export async function retrieveDownload(socket: Socket) { socket.emit('pending-jobs', _poolSize) const it = pool.iterator(); - const tempWorkQueue = new Array(); + const tempWorkQueue = new Array(); // sanitize for (const entry of it) { @@ -207,6 +212,8 @@ const formatter = (stdout: string, pid: number) => { progress: '100', } default: - return { progress: '0' } + return { + progress: '0' + } } }