Fix conflicts
This commit is contained in:
@@ -3,6 +3,7 @@ const { setLogging, log } = require('./utils/log');
|
||||
const resolvePaths = require('./utils/resolvePaths');
|
||||
const parseProgress = require('./utils/parseProgress');
|
||||
const stringList2pointer = require('./utils/stringList2pointer');
|
||||
const parseArgs = require('./utils/parseArgs');
|
||||
const {
|
||||
defaultOptions,
|
||||
getModule,
|
||||
@@ -92,7 +93,7 @@ module.exports = (_options = {}) => {
|
||||
} else {
|
||||
running = true;
|
||||
return new Promise((resolve) => {
|
||||
const args = [...defaultArgs, ..._args.trim().split(' ')].filter((s) => s.length !== 0);
|
||||
const args = [...defaultArgs, ...parseArgs(_args)].filter((s) => s.length !== 0);
|
||||
log('info', `ffmpeg command: ${args.join(' ')}`);
|
||||
runResolve = resolve;
|
||||
ffmpeg(args.length, stringList2pointer(Module, args));
|
||||
|
||||
51
src/utils/parseArgs.js
Normal file
51
src/utils/parseArgs.js
Normal file
@@ -0,0 +1,51 @@
|
||||
module.exports = (cmd) => {
|
||||
const args = [];
|
||||
let nextDelimiter = 0;
|
||||
let prevDelimiter = 0;
|
||||
// eslint-disable-next-line no-cond-assign
|
||||
while ((nextDelimiter = cmd.indexOf(' ', prevDelimiter)) >= 0) {
|
||||
let arg = cmd.substring(prevDelimiter, nextDelimiter);
|
||||
let quoteIdx = arg.indexOf('\'');
|
||||
let dblQuoteIdx = arg.indexOf('"');
|
||||
|
||||
if (quoteIdx === 0 || dblQuoteIdx === 0) {
|
||||
/* The argument has a quote at the start i.e, 'id=0,streams=0 id=1,streams=1' */
|
||||
const delimiter = arg[0];
|
||||
const endDelimiter = cmd.indexOf(delimiter, prevDelimiter + 1);
|
||||
|
||||
if (endDelimiter < 0) {
|
||||
throw new Error(`Bad command escape sequence ${delimiter} near ${nextDelimiter}`);
|
||||
}
|
||||
|
||||
arg = cmd.substring(prevDelimiter + 1, endDelimiter);
|
||||
prevDelimiter = endDelimiter + 2;
|
||||
args.push(arg);
|
||||
} else if (quoteIdx > 0 || dblQuoteIdx > 0) {
|
||||
/* The argument has a quote in it, it must be ended correctly i,e. title='test' */
|
||||
if (quoteIdx === -1) quoteIdx = Infinity;
|
||||
if (dblQuoteIdx === -1) dblQuoteIdx = Infinity;
|
||||
const delimiter = (quoteIdx < dblQuoteIdx) ? '\'' : '"';
|
||||
const quoteOffset = Math.min(quoteIdx, dblQuoteIdx);
|
||||
const endDelimiter = cmd.indexOf(delimiter, prevDelimiter + quoteOffset + 1);
|
||||
|
||||
if (endDelimiter < 0) {
|
||||
throw new Error(`Bad command escape sequence ${delimiter} near ${nextDelimiter}`);
|
||||
}
|
||||
|
||||
arg = cmd.substring(prevDelimiter, endDelimiter + 1);
|
||||
prevDelimiter = endDelimiter + 2;
|
||||
args.push(arg);
|
||||
} else if (arg !== '') {
|
||||
args.push(arg);
|
||||
prevDelimiter = nextDelimiter + 1;
|
||||
} else {
|
||||
prevDelimiter = nextDelimiter + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (prevDelimiter !== cmd.length) {
|
||||
args.push(cmd.substring(prevDelimiter));
|
||||
}
|
||||
|
||||
return args;
|
||||
};
|
||||
Reference in New Issue
Block a user