From e0703c734985640b3f2f5cabd4b5705a924163d2 Mon Sep 17 00:00:00 2001 From: Paul Kinlan Date: Tue, 14 Apr 2020 01:28:42 +0100 Subject: [PATCH] Addresses #50 - parses delimeters that all allow embedded spaces --- src/worker-script/index.js | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/worker-script/index.js b/src/worker-script/index.js index 57ebfef..125a086 100644 --- a/src/worker-script/index.js +++ b/src/worker-script/index.js @@ -45,6 +45,36 @@ const FS = ({ } }; +const parseArgs = (command) => { + let args = []; + let nextDelimiter = 0; + let prevDelimiter = 0; + while((nextDelimiter = command.indexOf(' ', prevDelimiter)) >= 0) { + let arg = command.substring(prevDelimiter, nextDelimiter) + + if (arg[0] === '\'' || arg[0] === '\"') { + const delimeter = arg[0]; + const newNext = command.indexOf(delimeter, prevDelimiter + 1); + + if (newNext < 0) throw `Bad command espcape ${delimeter} sequence near ${nextDelimiter}` + + arg = command.substring(prevDelimiter+1, newNext); + prevDelimiter = newNext + 2; + } + else { + prevDelimiter = nextDelimiter + 1; + + if (arg === "") { + continue; + } + } + + args.push(arg) + } + + return args; +} + const run = ({ payload: { args: _args, @@ -53,7 +83,7 @@ const run = ({ if (Module === null) { throw NO_LOAD_ERROR; } else { - const args = [...defaultArgs, ..._args.trim().split(' ')].filter((s) => s.length !== 0); + const args = [...defaultArgs, ...parseArgs(_args))].filter((s) => s.length !== 0); ffmpeg(args.length, strList2ptr(Module, args)); res.resolve({ message: `Complete ${args.join(' ')}`,