node-camera
Version:
This `gphoto2` wrapper for Node.js enables you to capture images, bursts, timelapses or even video.
44 lines (35 loc) • 1.17 kB
text/typescript
import { Callbacks, CommandResult } from "./types";
const util = require("util");
const spawn = require("child_process").spawn;
const exec = util.promisify(require("child_process").exec);
export const execCommand = async (args: string[]) => {
return new Promise<CommandResult>(async (resolve, reject) => {
try {
console.log(`gphoto2 ${args.join(" ")}`);
const { stdout, stderr } = await exec(`gphoto2 ${args.join(" ")}`);
if (!!stderr) {
reject({ error: stderr });
}
resolve({ data: stdout });
} catch (error) {
reject({ error });
}
});
};
export const spawnCommand = (args: string[], callbacks?: Callbacks) => {
const command = spawn("gphoto2", args);
command.stdout.on("data", (data: any) => {
callbacks?.onData && callbacks?.onData(data);
});
command.stderr.on("data", (error: any) => {
callbacks?.onError && callbacks?.onError(error);
});
command.on("close", (code: number) => {
callbacks?.onClose && callbacks?.onClose(EXIT_CODES[code] || "UNKNOWN");
});
return command;
};
const EXIT_CODES: any = {
0: "IMAGE_CAPTURE_FINISHED",
1: "IMAGE_CAPTURE_CANCELED"
};