forked from 77media/video-flow
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { SceneEntity } from '../domain/Entities';
|
|
import { SceneItem, TagItem, TextItem } from '../domain/Item';
|
|
import { regenerateScene, applySceneToShots } from '@/api/video_flow';
|
|
|
|
/**
|
|
* 场景编辑用例
|
|
* 负责场景内容的初始化、修改和优化
|
|
*/
|
|
export class SceneEditUseCase {
|
|
constructor(private sceneItem: SceneItem) {
|
|
}
|
|
|
|
/**
|
|
* @description: 重新生成场景
|
|
* @param {TextItem} prompt
|
|
* @param {TagItem[]} tags
|
|
* @return {*}
|
|
*/
|
|
async AIgenerateScene(prompt: TextItem, tags: TagItem[]): Promise<SceneEntity> {
|
|
const promptText = prompt.entity.content;
|
|
const tagList = tags.map((tag) => tag.entity.content);
|
|
|
|
// 调用重新生成场景接口
|
|
const response = await regenerateScene({
|
|
sceneId: this.sceneItem.entity.id || '',
|
|
prompt: promptText,
|
|
tagTypes: tagList,
|
|
});
|
|
|
|
if (response.successful) {
|
|
const sceneEntity = response.data;
|
|
this.sceneItem.setEntity(sceneEntity);
|
|
return sceneEntity;
|
|
} else {
|
|
throw new Error(`重新生成场景失败: ${response.message}`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 应用此场景到指定分镜
|
|
* @param shotIds 分镜ID列表
|
|
* @returns 应用结果
|
|
*/
|
|
async applyScene(shotIds: string[]) {
|
|
const sceneId = this.sceneItem.entity.id;
|
|
|
|
return await applySceneToShots({
|
|
sceneId,
|
|
shotIds
|
|
});
|
|
}
|
|
}
|