polyv-live-cli
Version:
CLI tool for managing PolyV live streaming services.
220 lines • 9.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AIVideoProduceHandler = void 0;
const base_handler_1 = require("./base.handler");
const errors_1 = require("../utils/errors");
const confirmation_1 = require("../utils/confirmation");
const ai_video_produce_service_1 = require("../services/ai-video-produce-service");
class AIVideoProduceHandler extends base_handler_1.BaseHandler {
constructor(authConfig, serviceConfig) {
super();
this.aiVideoProduceService = new ai_video_produce_service_1.AIVideoProduceServiceSdk(authConfig, serviceConfig);
}
async listTtsVoices(options) {
const format = options.output || 'table';
const page = options.page || 1;
const size = options.size || 10;
const voices = await this.aiVideoProduceService.listTtsVoices(page, size);
if (format === 'json') {
this.displayData(voices, 'json');
return;
}
if (voices.length === 0) {
console.log('No TTS voices found (未找到可用声音)');
return;
}
this.displayAsTable(voices.map((voice) => ({
ID: voice.id,
'声音名称': voice.voiceName,
'标签': voice.tag,
'试听地址': voice.voiceDemoUrl,
})));
}
async listVideoProduces(options) {
const format = options.output || 'table';
const params = {
pageNumber: options.page || 1,
pageSize: options.size || 10,
};
if (options.videoName)
params.videoName = options.videoName;
if (options.status !== undefined)
params.status = options.status;
if (options.createTimeStart !== undefined)
params.createTimeStart = options.createTimeStart;
if (options.createTimeEnd !== undefined)
params.createTimeEnd = options.createTimeEnd;
const tags = this.parseTags(options.tags);
if (tags.length > 0)
params.tags = tags;
const response = await this.aiVideoProduceService.listVideoProduces(params);
if (format === 'json') {
this.displayData(response, 'json');
return;
}
if (response.contents.length === 0) {
console.log('No AI video produce tasks found (未找到视频创作任务)');
return;
}
this.displayAsTable(response.contents.map((task) => ({
ID: task.id,
'视频名称': task.videoName,
'类型': task.type,
'状态': task.status,
'数字人ID': task.digitalHumanId ?? '-',
'时长': task.duration ?? '-',
'创建时间': this.formatTimestamp(task.createTime),
})));
this.displayPageFooter(response.pageNumber, response.totalPages, response.totalItems);
}
async getVideoProduce(options) {
const format = options.output || 'table';
const task = await this.aiVideoProduceService.getVideoProduce(options.id);
this.displayData(task, format);
}
async createVideoProduces(options) {
const format = options.output || 'table';
const tasks = this.parseCreateTasks(options.tasks);
if (!options.force) {
const confirmed = await (0, confirmation_1.confirmDeletion)(`Create ${tasks.length} AI video produce task(s)?`, 'yes');
if (!confirmed) {
this.displayCancellation(format);
return;
}
}
const response = await this.aiVideoProduceService.batchCreateVideoProduces(tasks);
if (format === 'json') {
this.displayData(response, 'json');
}
else {
console.log(`Successfully created ${response.createdCount ?? tasks.length} AI video produce task(s).`);
}
}
async deleteVideoProduce(options) {
const format = options.output || 'table';
if (!options.force) {
const confirmed = await (0, confirmation_1.confirmDeletion)(`Delete AI video produce task ${options.id}?`, 'yes');
if (!confirmed) {
this.displayCancellation(format);
return;
}
}
const success = await this.aiVideoProduceService.deleteVideoProduce(options.id);
this.displayMutationResult({ success, id: options.id }, format, 'AI video produce task deleted.');
}
async listVideoProducePpts(options) {
const format = options.output || 'table';
const response = await this.aiVideoProduceService.listVideoProducePpts(options.page || 1, options.size || 10);
if (format === 'json') {
this.displayData(response, 'json');
return;
}
if (response.contents.length === 0) {
console.log('No AI video produce PPT files found (未找到视频创作PPT)');
return;
}
this.displayAsTable(response.contents.map((ppt) => ({
'文件ID': ppt.fileId,
'文件名': ppt.fileName,
'状态': ppt.status,
'页数': ppt.totalPage ?? '-',
'转换类型': ppt.convertType,
'创建时间': this.formatTimestamp(ppt.createTime),
})));
this.displayPageFooter(response.pageNumber, response.totalPages, response.totalItems);
}
async getVideoProducePpt(options) {
const format = options.output || 'table';
const ppt = await this.aiVideoProduceService.getVideoProducePpt(options.fileId);
this.displayData(ppt, format);
}
async uploadVideoProducePpt(options) {
const format = options.output || 'table';
if (!options.force) {
const confirmed = await (0, confirmation_1.confirmDeletion)(`Upload PPT for AI video production from ${options.url}?`, 'yes');
if (!confirmed) {
this.displayCancellation(format);
return;
}
}
const params = { url: options.url };
if (options.docName)
params.docName = options.docName;
const response = await this.aiVideoProduceService.uploadVideoProducePpt(params);
this.displayMutationResult(response, format, 'AI video produce PPT uploaded.');
}
async asyncUploadVideoProducePpt(options) {
const format = options.output || 'table';
if (!options.force) {
const confirmed = await (0, confirmation_1.confirmDeletion)(`Start async PPT upload for AI video production from ${options.url}?`, 'yes');
if (!confirmed) {
this.displayCancellation(format);
return;
}
}
const params = { url: options.url };
if (options.docName)
params.docName = options.docName;
if (options.type)
params.type = options.type;
if (options.callbackUrl)
params.callbackUrl = options.callbackUrl;
if (options.childUserId)
params.childUserId = options.childUserId;
const response = await this.aiVideoProduceService.asyncUploadVideoProducePpt(params);
this.displayMutationResult(response, format, 'AI video produce PPT async upload started.');
}
parseCreateTasks(value) {
if (!value || value.trim() === '') {
throw new errors_1.PolyVValidationError('tasks is required', 'tasks', value, 'required');
}
let tasks;
try {
tasks = JSON.parse(value);
}
catch {
throw new errors_1.PolyVValidationError('tasks must be valid JSON', 'tasks', value, 'invalid');
}
if (!Array.isArray(tasks) || tasks.length === 0) {
throw new errors_1.PolyVValidationError('tasks must be a non-empty JSON array', 'tasks', value, 'invalid');
}
if (tasks.length > 20) {
throw new errors_1.PolyVValidationError('tasks cannot contain more than 20 items', 'tasks', tasks.length, 'exceed_maximum');
}
return tasks;
}
parseTags(value) {
if (!value)
return [];
return value
.split(',')
.map((tag) => tag.trim())
.filter((tag) => tag.length > 0);
}
displayMutationResult(data, format, message) {
if (format === 'json') {
this.displayData(data, 'json');
}
else {
console.log(message);
}
}
displayCancellation(format) {
if (format === 'json') {
this.displayData({ success: false, cancelled: true }, 'json');
}
else {
console.log('Operation cancelled.');
}
}
displayPageFooter(pageNumber, totalPages, totalItems) {
console.log(`\nPage ${pageNumber}/${totalPages} | Total: ${totalItems} items`);
}
formatTimestamp(timestamp) {
if (!timestamp)
return '-';
return new Date(timestamp).toISOString().split('T')[0] || '-';
}
}
exports.AIVideoProduceHandler = AIVideoProduceHandler;
//# sourceMappingURL=ai-video-produce.handler.js.map