From 415e925f9972a0855791510f540592352cad24d3 Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Fri, 21 Feb 2020 14:52:20 +0100 Subject: [PATCH 1/7] Move broadcast command outside finally block to get an error when the command is invalid --- src/script-builder.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/script-builder.ts b/src/script-builder.ts index 52b733a..3104388 100644 --- a/src/script-builder.ts +++ b/src/script-builder.ts @@ -10,9 +10,8 @@ var ___{{__command__}} = (function() { __stdout = {{__fn__}} } catch (e) { __stderr = e; - } finally { - {{__broadcast__}} - } + } + {{__broadcast__}} })();`; const newAdobeScriptBuilder = (): AdobeScriptBuilder => { From 1bf9a82bb938cd9254c9a4a8177c790a48c7b784 Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Fri, 21 Feb 2020 14:54:59 +0100 Subject: [PATCH 2/7] Add typescript to not be dependent on global package --- package-lock.json | 6 ++++++ package.json | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 54ab20b..0795167 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,12 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "typescript": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.2.tgz", + "integrity": "sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ==", + "dev": true } } } diff --git a/package.json b/package.json index ad5be6a..43ac003 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ }, "homepage": "https://github.com/rkamysz/adobe-node#readme", "devDependencies": { - "@types/node": "^12.12.5" + "@types/node": "^12.12.5", + "typescript": "^3.8.2" }, "dependencies": { "@types/minimist": "^1.2.0", From 4a8778eccf392b7b95a9f1ab73ad28d251746fe6 Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Fri, 21 Feb 2020 18:42:27 +0100 Subject: [PATCH 3/7] Use BridgeTalk to send message from Illustrator --- src/broadcast.ts | 30 ++++++++++++++++++++++-------- src/listener.ts | 21 ++++++++++++--------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/broadcast.ts b/src/broadcast.ts index 484586b..8056b4f 100644 --- a/src/broadcast.ts +++ b/src/broadcast.ts @@ -1,23 +1,37 @@ import { AdobeAppName, BroadcastBuilder, BroadcastMessage, Config } from "./api"; import { exec } from 'child_process'; -const broadcastMethods: Map string> = new Map string>([ - [AdobeAppName.Animate, (cmd: string) => `FLfile.runCommandLine("${cmd}");`], - [AdobeAppName.Photoshop, (cmd: string) => `app.system("${cmd}");`], - [AdobeAppName.Illustrator, (cmd: string) => `app.system("${cmd}");`], +const broadcastMethods: Map string> = new Map string>([ + [AdobeAppName.Animate, (cmd: string, payload: string) => `FLfile.runCommandLine("${cmd}");`], + [AdobeAppName.Photoshop, (cmd: string, payload: string) => `app.system("${cmd}");`], + [AdobeAppName.Illustrator, (cmd: string, payload: string) => ` + const bt = new BridgeTalk(); + bt.target = 'bridge'; + const btCmd = '${cmd.replace(/'/g, "\\'")}'; + bt.body = 'const cmd = "' + btCmd + '";'; + bt.body += 'const msg = \\\'${payload}\\\';'; + bt.body += 'const sys = cmd + " --msg=\\\'" + msg + "\\\'";'; + bt.body += 'app.system(sys);'; + bt.onError = function(bt) + { + alert(bt.body); + }; + bt.send(); + alert(bt.body); + `] ]); const buildBroadcastCommand = (host: string, port: number, message: string) => - `adobe-broadcast --host='${host}' --port=${port} --msg='${message}'`; + `adobe-broadcast --host='${host}' --port=${port}`; export const newBroadcastBuilder = (config: Config): BroadcastBuilder => { return { build(command: string) { - const payload: string = `{\\"command\\":\\"${command}\\",\\"stdout\\":\\"" + __stdout + "\\", \\"stderr\\":\\"" + __stderr + "\\" }`; - const broadcast: (msg: string) => string = broadcastMethods.get(config.app.name); + const payload: string = `{"command": "${command}"}`; + const broadcast: (msg: string, payload: string) => string = broadcastMethods.get(config.app.name); const cmd: string = buildBroadcastCommand(config.host, config.port, payload); - return broadcast(cmd); + return broadcast(cmd, payload); } } } diff --git a/src/listener.ts b/src/listener.ts index e9f397b..0039804 100644 --- a/src/listener.ts +++ b/src/listener.ts @@ -2,26 +2,29 @@ import { AdobeEventListener, BroadcastMessage } from './api'; import { Socket, Server, createServer } from 'net'; const newAdobeAppListener = (host: string, port: number, callback: (commandName: string) => void): AdobeEventListener => { - + const callbacks: Map = new Map(); let server: Server; - let client:Socket; + let client: Socket; function connectionListener(socket: Socket) { client = socket; socket.on('data', (buffer: Buffer) => { - const data: BroadcastMessage = JSON.parse(buffer.toString()); - - if (callbacks.has(data.command)) { - callbacks.get(data.command)(data.stdout, data.stderr); + try { + const dataString = buffer.toString(); + const data: any = JSON.parse(dataString); + if (callbacks.has(data.command)) { + callbacks.get(data.command)(data.stdout, data.stderr); + } + callback(data.command); + } catch (error) { + console.error("Failed to convert data: " + error); } - - callback(data.command); }); } function disposeServer() { - if(client) { + if (client) { client.end(); } server = null; From 7998c2ed29463a1fdb8441e483c0160ff8abb56d Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Fri, 21 Feb 2020 18:51:55 +0100 Subject: [PATCH 4/7] Add result and error to msg --- src/broadcast.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/broadcast.ts b/src/broadcast.ts index 8056b4f..6230ae9 100644 --- a/src/broadcast.ts +++ b/src/broadcast.ts @@ -4,12 +4,12 @@ import { exec } from 'child_process'; const broadcastMethods: Map string> = new Map string>([ [AdobeAppName.Animate, (cmd: string, payload: string) => `FLfile.runCommandLine("${cmd}");`], [AdobeAppName.Photoshop, (cmd: string, payload: string) => `app.system("${cmd}");`], - [AdobeAppName.Illustrator, (cmd: string, payload: string) => ` + [AdobeAppName.Illustrator, (cmd: string, command: string) => ` const bt = new BridgeTalk(); bt.target = 'bridge'; const btCmd = '${cmd.replace(/'/g, "\\'")}'; bt.body = 'const cmd = "' + btCmd + '";'; - bt.body += 'const msg = \\\'${payload}\\\';'; + bt.body += 'const msg = \\\'{"command": "${command}", "stdout": "' + __stdout + '", "stderr": "' + __stderr + '"}\\\';'; bt.body += 'const sys = cmd + " --msg=\\\'" + msg + "\\\'";'; bt.body += 'app.system(sys);'; bt.onError = function(bt) @@ -21,22 +21,21 @@ const broadcastMethods: Map stri `] ]); -const buildBroadcastCommand = (host: string, port: number, message: string) => +const buildBroadcastCommand = (host: string, port: number) => `adobe-broadcast --host='${host}' --port=${port}`; export const newBroadcastBuilder = (config: Config): BroadcastBuilder => { return { build(command: string) { - const payload: string = `{"command": "${command}"}`; const broadcast: (msg: string, payload: string) => string = broadcastMethods.get(config.app.name); - const cmd: string = buildBroadcastCommand(config.host, config.port, payload); - return broadcast(cmd, payload); + const cmd: string = buildBroadcastCommand(config.host, config.port); + return broadcast(cmd, command); } } } export const broadcast = (host: string, port: number, message: BroadcastMessage) => { - const cmd: string = buildBroadcastCommand(host, port, JSON.stringify(message)); + const cmd: string = buildBroadcastCommand(host, port); exec(cmd); } From 2e0ef40224627d50398c1e5c0aed25ffc19e3673 Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Fri, 21 Feb 2020 19:27:29 +0100 Subject: [PATCH 5/7] Send result of script as Javascript Object instead of string --- package-lock.json | 2 +- src/broadcast.ts | 8 +++++++- src/listener.ts | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0795167..51e5897 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adobe-node", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/broadcast.ts b/src/broadcast.ts index 6230ae9..f70e87f 100644 --- a/src/broadcast.ts +++ b/src/broadcast.ts @@ -5,11 +5,17 @@ const broadcastMethods: Map stri [AdobeAppName.Animate, (cmd: string, payload: string) => `FLfile.runCommandLine("${cmd}");`], [AdobeAppName.Photoshop, (cmd: string, payload: string) => `app.system("${cmd}");`], [AdobeAppName.Illustrator, (cmd: string, command: string) => ` + if (!__stdout) { + __stdout = "{}"; + } + if (!__stderr) { + __stderr = ""; + } const bt = new BridgeTalk(); bt.target = 'bridge'; const btCmd = '${cmd.replace(/'/g, "\\'")}'; bt.body = 'const cmd = "' + btCmd + '";'; - bt.body += 'const msg = \\\'{"command": "${command}", "stdout": "' + __stdout + '", "stderr": "' + __stderr + '"}\\\';'; + bt.body += 'const msg = \\\'{"command": "${command}", "stdout": ' + __stdout + ', "stderr": "' + __stderr + '"}\\\';'; bt.body += 'const sys = cmd + " --msg=\\\'" + msg + "\\\'";'; bt.body += 'app.system(sys);'; bt.onError = function(bt) diff --git a/src/listener.ts b/src/listener.ts index 0039804..6b1fa0d 100644 --- a/src/listener.ts +++ b/src/listener.ts @@ -14,7 +14,8 @@ const newAdobeAppListener = (host: string, port: number, callback: (commandName: const dataString = buffer.toString(); const data: any = JSON.parse(dataString); if (callbacks.has(data.command)) { - callbacks.get(data.command)(data.stdout, data.stderr); + const callback = callbacks.get(data.command); + callback(data.stdout, data.stderr); } callback(data.command); } catch (error) { From 4a8cf8e1c7e9071f006fb669b05081b16268d41b Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Wed, 26 Feb 2020 13:48:41 +0100 Subject: [PATCH 6/7] Remove JS alert with BridgeTalk body --- src/broadcast.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/broadcast.ts b/src/broadcast.ts index f70e87f..de30514 100644 --- a/src/broadcast.ts +++ b/src/broadcast.ts @@ -20,10 +20,9 @@ const broadcastMethods: Map stri bt.body += 'app.system(sys);'; bt.onError = function(bt) { - alert(bt.body); + alert("Error from BridgeTalk: " + bt.body); }; bt.send(); - alert(bt.body); `] ]); From 44d26e222d6ac1186cee623839213fe16a143b31 Mon Sep 17 00:00:00 2001 From: Christian Oeing Date: Wed, 26 Feb 2020 14:57:48 +0100 Subject: [PATCH 7/7] Revert changes to broadcast logic of Photoshop and Animate to make them work again --- src/broadcast.ts | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/broadcast.ts b/src/broadcast.ts index de30514..9c92860 100644 --- a/src/broadcast.ts +++ b/src/broadcast.ts @@ -1,10 +1,20 @@ import { AdobeAppName, BroadcastBuilder, BroadcastMessage, Config } from "./api"; import { exec } from 'child_process'; -const broadcastMethods: Map string> = new Map string>([ - [AdobeAppName.Animate, (cmd: string, payload: string) => `FLfile.runCommandLine("${cmd}");`], - [AdobeAppName.Photoshop, (cmd: string, payload: string) => `app.system("${cmd}");`], - [AdobeAppName.Illustrator, (cmd: string, command: string) => ` +const createPayload = (command: string): string => { + return `{\\"command\\":\\"${command}\\",\\"stdout\\":\\"" + __stdout + "\\", \\"stderr\\":\\"" + __stderr + "\\" }`; +}; + +const buildBroadcastCommand = (host: string, port: number, message: string): string => { + return `adobe-broadcast --host='${host}' --port=${port} --msg='${message}'`; +} + +const broadcastMethods: Map string> = new Map string>([ + [AdobeAppName.Animate, (host: string, port: number, command: string) => `FLfile.runCommandLine("${buildBroadcastCommand(host, port, createPayload(command))}");`], + [AdobeAppName.Photoshop, (host: string, port: number, command: string) => `app.system("${buildBroadcastCommand(host, port, createPayload(command))}");`], + [AdobeAppName.Illustrator, (host: string, port: number, command: string) => { + const cmd = `adobe-broadcast --host='${host}' --port=${port}`; + return ` if (!__stdout) { __stdout = "{}"; } @@ -23,24 +33,22 @@ const broadcastMethods: Map stri alert("Error from BridgeTalk: " + bt.body); }; bt.send(); - `] + ` + } + ] ]); -const buildBroadcastCommand = (host: string, port: number) => - `adobe-broadcast --host='${host}' --port=${port}`; - export const newBroadcastBuilder = (config: Config): BroadcastBuilder => { return { build(command: string) { - const broadcast: (msg: string, payload: string) => string = broadcastMethods.get(config.app.name); - const cmd: string = buildBroadcastCommand(config.host, config.port); - return broadcast(cmd, command); + const broadcast = broadcastMethods.get(config.app.name); + return broadcast(config.host, config.port, command); } } } export const broadcast = (host: string, port: number, message: BroadcastMessage) => { - const cmd: string = buildBroadcastCommand(host, port); + const cmd: string = buildBroadcastCommand(host, port, JSON.stringify(message)); exec(cmd); }