amaran-light-cli
Version:
Command line tool for controlling Aputure Amaran lights via WebSocket to a local Amaran desktop app.
101 lines • 4.5 kB
JavaScript
import chalk from 'chalk';
import { addStandardOptions } from '../cmdUtils.js';
export function registerScene(program, deps) {
const { asyncCommand } = deps;
const scene = program.command('scene').description('Manage scenes');
addStandardOptions(scene.command('list').description('List all saved scenes')).action(asyncCommand(handleSceneList(deps)));
addStandardOptions(scene.command('save <name>').description('Save current state as a scene')).action(asyncCommand(handleSceneSave(deps)));
addStandardOptions(scene.command('recall <id>').description('Recall a saved scene')).action(asyncCommand(handleSceneRecall(deps)));
addStandardOptions(scene.command('delete <id>').description('Delete a scene')).action(asyncCommand(handleSceneDelete(deps)));
addStandardOptions(scene.command('update <id>').option('-n, --name <name>', 'New name for the scene').description('Update a scene')).action(asyncCommand(handleSceneUpdate(deps)));
}
function handleSceneList(deps) {
const { createController } = deps;
return async (options) => {
const controller = await createController(options.url, options.clientId, options.debug);
controller.getSceneList((success, message, data) => {
if (success) {
// biome-ignore lint/suspicious/noExplicitAny: API response data structure varies
const scenes = data.data;
if (scenes.length === 0) {
console.log(chalk.yellow('No scenes found'));
}
else {
console.log(chalk.blue('Saved Scenes:'));
// biome-ignore lint/suspicious/noExplicitAny: API response data structure varies
scenes.forEach((scene, index) => {
console.log(`${index + 1}. ${chalk.green(scene.name || 'Unnamed')} (${chalk.gray(scene.id || scene.scene_id)})`);
});
}
}
else {
console.error(chalk.red(`Error getting scene list: ${message}`));
}
controller.disconnect();
});
};
}
function handleSceneSave(deps) {
const { createController } = deps;
return async (name, options) => {
const controller = await createController(options.url, options.clientId, options.debug);
controller.saveScene(name, (success, message, data) => {
if (success) {
console.log(chalk.green(`Scene "${name}" saved successfully`));
if (data)
console.log('Data:', data);
}
else {
console.error(chalk.red(`Error saving scene: ${message}`));
}
controller.disconnect();
});
};
}
function handleSceneRecall(deps) {
const { createController } = deps;
return async (id, options) => {
const controller = await createController(options.url, options.clientId, options.debug);
controller.recallScene(id, (success, message) => {
if (success) {
console.log(chalk.green(`Scene ${id} recalled successfully`));
}
else {
console.error(chalk.red(`Error recalling scene: ${message}`));
}
controller.disconnect();
});
};
}
function handleSceneDelete(deps) {
const { createController } = deps;
return async (id, options) => {
const controller = await createController(options.url, options.clientId, options.debug);
controller.deleteScene(id, (success, message) => {
if (success) {
console.log(chalk.green(`Scene ${id} deleted successfully`));
}
else {
console.error(chalk.red(`Error deleting scene: ${message}`));
}
controller.disconnect();
});
};
}
function handleSceneUpdate(deps) {
const { createController } = deps;
return async (id, options) => {
const controller = await createController(options.url, options.clientId, options.debug);
controller.updateScene(id, options.name, (success, message) => {
if (success) {
console.log(chalk.green(`Scene ${id} updated successfully`));
}
else {
console.error(chalk.red(`Error updating scene: ${message}`));
}
controller.disconnect();
});
};
}
export default registerScene;
//# sourceMappingURL=scene.js.map