1
0
mirror of https://github.com/snobu/destreamer.git synced 2026-01-17 05:22:18 +00:00

changed exec in favour of spawn for aria2c

(should solve and close #254)
This commit is contained in:
Luca Armaroli
2020-10-11 22:20:45 +02:00
parent 41206a97f0
commit 1763dc8cbd

View File

@@ -12,7 +12,7 @@ import { Video, Session } from './Types';
import { checkRequirements, parseInputFile, parseCLIinput, getUrlsFromPlaylist} from './Utils';
import { getVideosInfo, createUniquePaths } from './VideoUtils';
import { exec, execSync, ChildProcess } from 'child_process';
import { spawn, execSync, ChildProcess } from 'child_process';
import fs from 'fs';
import isElevated from 'is-elevated';
import portfinder from 'portfinder';
@@ -157,24 +157,33 @@ async function downloadVideo(videoGUIDs: Array<string>,
/* FIXME: aria2Exec must be defined here for the scope but if it's not aslo undefined it says
that later on is used without being initialized even if we exit if it's not initialized.
Is there something that im missing? Probably since it's late but Ill leave it to you Adrian*/
let aria2cExec: ChildProcess | undefined;
let aria2cExec: ChildProcess;
let arai2cExited = false;
await portfinder.getPortPromise({ port: 6800 }).then(
async (port: number) => {
logger.debug(`[DESTREAMER] Trying to use port ${port}`);
// Launch aria2c
aria2cExec = exec(
`aria2c --enable-rpc --pause=true --rpc-listen-port=${port}`, (err, stdout, stderr) => {
if (err) {
logger.error(err.message ? err.message : (stderr ? stderr : stdout));
process.exit(ERROR_CODE.ARIA2C_CRASH);
}
else {
logger.verbose('Aria2c process exited');
arai2cExited = true;
}
}
aria2cExec = spawn(
'aria2c',
['--enable-rpc', '--pause=true', `--rpc-listen-port=${port}`],
{stdio: 'ignore'}
);
aria2cExec.on('exit', (code: number | null, signal: string) => {
if (code === 0) {
logger.verbose('Aria2c process exited');
arai2cExited = true;
}
else {
logger.error(`aria2c exit code: ${code}` + '\n' + `aria2c exit signal: ${signal}`);
process.exit(ERROR_CODE.ARIA2C_CRASH);
}
});
aria2cExec.on('error', (err) => {
logger.error(err as Error);
});
// init webSocket
await downloadManager.init(port);
// We are connected
@@ -350,7 +359,7 @@ async function downloadVideo(videoGUIDs: Array<string>,
await new Promise(r => setTimeout(r, 1000));
}
else {
aria2cExec?.kill('SIGINT');
aria2cExec!.kill('SIGINT');
}
}
logger.debug('[destreamer] stopped aria2c');