implement record commands

This commit is contained in:
onyx-and-iris 2025-06-30 12:57:11 +01:00
parent 38e279fe3c
commit f9ec415ea4
3 changed files with 146 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import cli from "./utils/cli.js";
import { sceneHelp, sceneList, sceneSwitch, sceneCurrent } from "./utils/scene.js"; import { sceneHelp, sceneList, sceneSwitch, sceneCurrent } from "./utils/scene.js";
import { audioHelp, audioMute, audioUnmute, audioToggle, audioStatus } from "./utils/audio.js"; import { audioHelp, audioMute, audioUnmute, audioToggle, audioStatus } from "./utils/audio.js";
import { streamHelp, streamStart, streamStop, streamStatus } from "./utils/stream.js"; import { streamHelp, streamStart, streamStop, streamStatus } from "./utils/stream.js";
import { recordHelp, recordStart, recordStop, recordStatus } from "./utils/record.js";
import { QWebChannel } from "qwebchannel"; import { QWebChannel } from "qwebchannel";
@ -241,6 +242,66 @@ socket.onopen = function() {
socket.close(); socket.close();
process.exit(0); process.exit(0);
} }
case "record":
if (flags.help) {
console.log(recordHelp);
socket.close();
process.exit(0);
}
const recordCommand = input[1];
switch (recordCommand) {
case "start":
channel = new QWebChannel(socket, function (channel) {
recordStart(channel)
.then((message) => {
console.log(message);
socket.close();
process.exit(0);
})
.catch((err) => {
console.error(`${err}`);
socket.close();
process.exit(1);
});
});
break;
case "stop":
channel = new QWebChannel(socket, function (channel) {
recordStop(channel)
.then((message) => {
console.log(message);
socket.close();
process.exit(0);
})
.catch((err) => {
console.error(`${err}`);
socket.close();
process.exit(1);
});
});
break;
case "status":
channel = new QWebChannel(socket, function (channel) {
recordStatus(channel)
.then((isRecording) => {
console.log(`Recording is currently ${isRecording ? "active" : "inactive"}`);
socket.close();
process.exit(0);
})
.catch((err) => {
console.error(`Error fetching recording status: ${err}`);
socket.close();
process.exit(1);
});
});
break;
default:
console.log(recordHelp);
socket.close();
process.exit(0);
}
} }
} catch (error) { } catch (error) {
console.error("Error handling CLI flags:", error); console.error("Error handling CLI flags:", error);

View File

@ -11,6 +11,9 @@ const commands = {
stream: { stream: {
desc: "Manage streaming", desc: "Manage streaming",
}, },
record: {
desc: "Manage recording",
},
}; };
const flags = { const flags = {

82
utils/record.js Normal file
View File

@ -0,0 +1,82 @@
import meowHelp from "cli-meow-help";
const commands = {
start: {
desc: "Start streaming",
},
stop: {
desc: "Stop streaming",
},
status: {
desc: "Show the current streaming status",
},
};
const flags = {
help: {
type: "boolean",
shortFlag: "h",
desc: "Display help information",
},
};
const recordHelp = meowHelp({
name: "meld-cli record",
flags,
commands,
description: "Manage recording in Meld",
defaults: false,
});
function recordStart(channel) {
if (!channel.objects || !channel.objects.meld) {
return Promise.reject(new Error("Meld object not found in channel."));
}
const meld = channel.objects.meld;
if (meld.isRecording) {
return Promise.reject(new Error("Recording is already active."));
}
return new Promise((resolve, reject) => {
meld.toggleRecord()
.then(() => {
resolve("Recording started successfully.");
})
.catch((err) => {
reject(err);
});
});
}
function recordStop(channel) {
if (!channel.objects || !channel.objects.meld) {
return Promise.reject(new Error("Meld object not found in channel."));
}
const meld = channel.objects.meld;
if (!meld.isRecording) {
return Promise.reject(new Error("Recording is not currently active."));
}
return new Promise((resolve, reject) => {
meld.toggleRecord()
.then(() => {
resolve("Recording stopped successfully.");
})
.catch((err) => {
reject(err);
});
});
}
function recordStatus(channel) {
if (!channel.objects || !channel.objects.meld) {
return Promise.reject(new Error("Meld object not found in channel."));
}
const meld = channel.objects.meld;
return Promise.resolve(meld.isRecording);
}
export { recordHelp, recordStart, recordStop, recordStatus };