forked from 77media/video-flow
更新工作流数据管理逻辑,新增任务数据结构以跟踪草图、角色、镜头草图和视频的状态和数量。同时,优化ScriptRenderer组件的状态管理,确保在不同来源下正确处理工作流暂停状态。修改编辑模态中的按钮文本为“应用”。
This commit is contained in:
parent
f147b72db6
commit
d588bb18e2
@ -82,6 +82,15 @@ export function useWorkflowData() {
|
|||||||
const [isPauseWorkFlow, setIsPauseWorkFlow] = useState(false);
|
const [isPauseWorkFlow, setIsPauseWorkFlow] = useState(false);
|
||||||
const [mode, setMode] = useState<'automatic' | 'manual'>('automatic');
|
const [mode, setMode] = useState<'automatic' | 'manual'>('automatic');
|
||||||
|
|
||||||
|
const taskData: any = {
|
||||||
|
sketch: { data: [], total_count: -1 },
|
||||||
|
character: { data: [], total_count: -1 },
|
||||||
|
shot_sketch: { data: [], total_count: -1 },
|
||||||
|
video: { data: [], total_count: -1 },
|
||||||
|
status: '0'
|
||||||
|
};
|
||||||
|
let loadingText: any = LOADING_TEXT_MAP.initializing;
|
||||||
|
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const { sketchCount, videoCount } = useAppSelector((state) => state.workflow);
|
const { sketchCount, videoCount } = useAppSelector((state) => state.workflow);
|
||||||
|
|
||||||
@ -193,8 +202,8 @@ export function useWorkflowData() {
|
|||||||
throw new Error(response.message);
|
throw new Error(response.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
let loadingText: any = LOADING_TEXT_MAP.initializing;
|
|
||||||
let finalStep = '0', sketchCount = 0, isChange = false;
|
let sketchCount = 0;
|
||||||
const all_task_data = response.data;
|
const all_task_data = response.data;
|
||||||
// all_task_data 下标0 和 下标1 换位置
|
// all_task_data 下标0 和 下标1 换位置
|
||||||
const temp = all_task_data[0];
|
const temp = all_task_data[0];
|
||||||
@ -205,8 +214,9 @@ export function useWorkflowData() {
|
|||||||
for (const task of all_task_data) {
|
for (const task of all_task_data) {
|
||||||
|
|
||||||
// 如果有已完成的数据,同步到状态
|
// 如果有已完成的数据,同步到状态
|
||||||
if (task.task_name === 'generate_sketch' && task.task_result) {
|
console.log('000000000', taskData);
|
||||||
finalStep = '1';
|
if (task.task_name === 'generate_sketch' && (task.task_status !== 'COMPLETED' || taskData.sketch.total_count !== taskData.sketch.data.length)) {
|
||||||
|
taskData.status = '1';
|
||||||
const realSketchResultData = task.task_result.data.filter((item: any) => item.image_path);
|
const realSketchResultData = task.task_result.data.filter((item: any) => item.image_path);
|
||||||
if (realSketchResultData.length >= 0) {
|
if (realSketchResultData.length >= 0) {
|
||||||
// 正在生成草图中 替换 sketch 数据
|
// 正在生成草图中 替换 sketch 数据
|
||||||
@ -217,6 +227,7 @@ export function useWorkflowData() {
|
|||||||
script: sketch.sketch_name
|
script: sketch.sketch_name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
taskData.sketch.data = sketchList;
|
||||||
setTaskSketch(sketchList);
|
setTaskSketch(sketchList);
|
||||||
setTaskScenes(sketchList);
|
setTaskScenes(sketchList);
|
||||||
updateSketchCount(sketchList.length);
|
updateSketchCount(sketchList.length);
|
||||||
@ -225,15 +236,16 @@ export function useWorkflowData() {
|
|||||||
}
|
}
|
||||||
if (task.task_status === 'COMPLETED') {
|
if (task.task_status === 'COMPLETED') {
|
||||||
// 草图生成完成
|
// 草图生成完成
|
||||||
|
taskData.sketch.total_count = taskData.sketch.data.length;
|
||||||
setIsGeneratingSketch(false);
|
setIsGeneratingSketch(false);
|
||||||
sketchCount = task.task_result.total_count;
|
sketchCount = task.task_result.total_count;
|
||||||
console.log('----------草图生成完成', sketchCount);
|
console.log('----------草图生成完成', sketchCount);
|
||||||
loadingText = LOADING_TEXT_MAP.sketchComplete;
|
loadingText = LOADING_TEXT_MAP.sketchComplete;
|
||||||
finalStep = '2';
|
taskData.status = '2';
|
||||||
}
|
}
|
||||||
setTotalSketchCount(task.task_result.total_count);
|
setTotalSketchCount(task.task_result.total_count);
|
||||||
}
|
}
|
||||||
if (task.task_name === 'generate_character' && task.task_result) {
|
if (task.task_name === 'generate_character' && (task.task_status !== 'COMPLETED' || taskData.character.total_count !== taskData.character.data.length)) {
|
||||||
if (task.task_result.data.length >= 0 && roles.length !== task.task_result.data.length) {
|
if (task.task_result.data.length >= 0 && roles.length !== task.task_result.data.length) {
|
||||||
// 正在生成角色中 替换角色数据
|
// 正在生成角色中 替换角色数据
|
||||||
const characterList = [];
|
const characterList = [];
|
||||||
@ -246,21 +258,23 @@ export function useWorkflowData() {
|
|||||||
roleDescription: character.character_description
|
roleDescription: character.character_description
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
taskData.character.data = characterList;
|
||||||
setRoles(characterList);
|
setRoles(characterList);
|
||||||
loadingText = LOADING_TEXT_MAP.newCharacter(characterList.length, task.task_result.total_count);
|
loadingText = LOADING_TEXT_MAP.newCharacter(characterList.length, task.task_result.total_count);
|
||||||
}
|
}
|
||||||
if (task.task_status === 'COMPLETED') {
|
if (task.task_status === 'COMPLETED') {
|
||||||
console.log('----------角色生成完成,有几个分镜', sketchCount);
|
console.log('----------角色生成完成,有几个分镜', sketchCount);
|
||||||
// 角色生成完成
|
// 角色生成完成
|
||||||
finalStep = '3';
|
taskData.character.total_count = taskData.character.data.length;
|
||||||
|
taskData.status = '3';
|
||||||
|
|
||||||
loadingText = LOADING_TEXT_MAP.getShotSketchStatus;
|
loadingText = LOADING_TEXT_MAP.getShotSketchStatus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (task.task_name === 'generate_shot_sketch' && task.task_result) {
|
if (task.task_name === 'generate_shot_sketch' && (task.task_status !== 'COMPLETED' || taskData.shot_sketch.total_count !== taskData.shot_sketch.data.length)) {
|
||||||
const realShotResultData = task.task_result.data.filter((item: any) => item.url);
|
const realShotResultData = task.task_result.data.filter((item: any) => item.url);
|
||||||
if (realShotResultData.length >= 0) {
|
if (realShotResultData.length >= 0) {
|
||||||
finalStep = '1';
|
taskData.status = '1';
|
||||||
console.log('----------正在生成草图中 替换 sketch 数据', taskShotSketch.length, realShotResultData.length);
|
console.log('----------正在生成草图中 替换 sketch 数据', taskShotSketch.length, realShotResultData.length);
|
||||||
// 正在生成草图中 替换 sketch 数据
|
// 正在生成草图中 替换 sketch 数据
|
||||||
const sketchList = [];
|
const sketchList = [];
|
||||||
@ -270,6 +284,7 @@ export function useWorkflowData() {
|
|||||||
script: sketch.description
|
script: sketch.description
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
taskData.shot_sketch.data = sketchList;
|
||||||
setTaskSketch(sketchList);
|
setTaskSketch(sketchList);
|
||||||
setTaskShotSketch(sketchList);
|
setTaskShotSketch(sketchList);
|
||||||
updateSketchCount(sketchList.length);
|
updateSketchCount(sketchList.length);
|
||||||
@ -278,16 +293,17 @@ export function useWorkflowData() {
|
|||||||
}
|
}
|
||||||
if (task.task_status === 'COMPLETED') {
|
if (task.task_status === 'COMPLETED') {
|
||||||
// 草图生成完成
|
// 草图生成完成
|
||||||
|
taskData.shot_sketch.total_count = taskData.shot_sketch.data.length;
|
||||||
setIsGeneratingSketch(false);
|
setIsGeneratingSketch(false);
|
||||||
setIsGeneratingVideo(true);
|
setIsGeneratingVideo(true);
|
||||||
sketchCount = task.task_result.total_count;
|
sketchCount = task.task_result.total_count;
|
||||||
console.log('----------草图生成完成', sketchCount);
|
console.log('----------草图生成完成', sketchCount);
|
||||||
loadingText = LOADING_TEXT_MAP.getVideoStatus;
|
loadingText = LOADING_TEXT_MAP.getVideoStatus;
|
||||||
finalStep = '3';
|
taskData.status = '3';
|
||||||
}
|
}
|
||||||
setTotalSketchCount(task.task_result.total_count);
|
setTotalSketchCount(task.task_result.total_count);
|
||||||
}
|
}
|
||||||
if (task.task_name === 'generate_videos' && task.task_result) {
|
if (task.task_name === 'generate_videos' && (task.task_status !== 'COMPLETED' || taskData.video.total_count !== taskData.video.data.length)) {
|
||||||
const realTaskResultData = task.task_result.data.filter((item: any) => item.urls && item.urls.length > 0);
|
const realTaskResultData = task.task_result.data.filter((item: any) => item.urls && item.urls.length > 0);
|
||||||
if (realTaskResultData.length >= 0) {
|
if (realTaskResultData.length >= 0) {
|
||||||
console.log('----------正在生成视频中', realTaskResultData.length);
|
console.log('----------正在生成视频中', realTaskResultData.length);
|
||||||
@ -302,6 +318,7 @@ export function useWorkflowData() {
|
|||||||
video_id: video.video_id,
|
video_id: video.video_id,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
taskData.video.data = videoList;
|
||||||
setTaskVideos(videoList);
|
setTaskVideos(videoList);
|
||||||
updateVideoCount(videoList.length);
|
updateVideoCount(videoList.length);
|
||||||
setIsGeneratingVideo(true);
|
setIsGeneratingVideo(true);
|
||||||
@ -310,11 +327,12 @@ export function useWorkflowData() {
|
|||||||
if (task.task_status === 'COMPLETED') {
|
if (task.task_status === 'COMPLETED') {
|
||||||
console.log('----------视频生成完成');
|
console.log('----------视频生成完成');
|
||||||
// 视频生成完成
|
// 视频生成完成
|
||||||
|
taskData.video.total_count = taskData.video.data.length;
|
||||||
setIsGeneratingVideo(false);
|
setIsGeneratingVideo(false);
|
||||||
finalStep = '4';
|
taskData.status = '4';
|
||||||
|
|
||||||
// 暂时没有音频生成 直接跳过
|
// 暂时没有音频生成 直接跳过
|
||||||
finalStep = '5';
|
taskData.status = '5';
|
||||||
loadingText = LOADING_TEXT_MAP.postProduction('generating rough cut video...');
|
loadingText = LOADING_TEXT_MAP.postProduction('generating rough cut video...');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -324,7 +342,7 @@ export function useWorkflowData() {
|
|||||||
setFinal({
|
setFinal({
|
||||||
url: task.task_result.video,
|
url: task.task_result.video,
|
||||||
})
|
})
|
||||||
finalStep = '5.5';
|
taskData.status = '5.5';
|
||||||
loadingText = LOADING_TEXT_MAP.postProduction('generating fine-grained video clips...');
|
loadingText = LOADING_TEXT_MAP.postProduction('generating fine-grained video clips...');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,7 +352,7 @@ export function useWorkflowData() {
|
|||||||
setFinal({
|
setFinal({
|
||||||
url: task.task_result.video,
|
url: task.task_result.video,
|
||||||
})
|
})
|
||||||
finalStep = '6';
|
taskData.status = '6';
|
||||||
loadingText = LOADING_TEXT_MAP.complete;
|
loadingText = LOADING_TEXT_MAP.complete;
|
||||||
|
|
||||||
// 停止轮询
|
// 停止轮询
|
||||||
@ -343,14 +361,14 @@ export function useWorkflowData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('----------finalStep', finalStep);
|
console.log('----------finalStep', taskData.status);
|
||||||
// 设置步骤
|
// 设置步骤
|
||||||
setCurrentStep(finalStep);
|
setCurrentStep(taskData.status);
|
||||||
setTaskObject(prev => {
|
setTaskObject(prev => {
|
||||||
if (!prev) return null;
|
if (!prev) return null;
|
||||||
return {
|
return {
|
||||||
...prev,
|
...prev,
|
||||||
taskStatus: finalStep
|
taskStatus: taskData.status
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
setCurrentLoadingText(loadingText);
|
setCurrentLoadingText(loadingText);
|
||||||
|
|||||||
@ -114,12 +114,14 @@ export const ScriptRenderer: React.FC<ScriptRendererProps> = ({ data, setIsPause
|
|||||||
if (contentEditableRef.current) {
|
if (contentEditableRef.current) {
|
||||||
const text = contentEditableRef.current.innerText;
|
const text = contentEditableRef.current.innerText;
|
||||||
console.log('contentEditableRef---text', text);
|
console.log('contentEditableRef---text', text);
|
||||||
setAnyAttribute(block.id, text,(old: string)=>{
|
if (from !== 'tab') {
|
||||||
if(old!==text){
|
setAnyAttribute(block.id, text,(old: string)=>{
|
||||||
mode.includes('auto') && applyScript();
|
if(old!==text){
|
||||||
setIsPauseWorkFlow(false);
|
mode.includes('auto') && applyScript();
|
||||||
}
|
setIsPauseWorkFlow(false);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -133,18 +135,20 @@ export const ScriptRenderer: React.FC<ScriptRendererProps> = ({ data, setIsPause
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setIsPauseWorkFlow(true);
|
|
||||||
setAddThemeTag(value);
|
setAddThemeTag(value);
|
||||||
setAnyAttribute('categories', value.join(','),(old: string)=>{
|
if (from !== 'tab') {
|
||||||
if(old!==value.join(',')){
|
setIsPauseWorkFlow(true);
|
||||||
mode.includes('auto') && applyScript();
|
setAnyAttribute('categories', value.join(','),(old: string)=>{
|
||||||
setIsPauseWorkFlow(false);
|
if(old!==value.join(',')){
|
||||||
}
|
mode.includes('auto') && applyScript();
|
||||||
});
|
setIsPauseWorkFlow(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleEditBlock = (block: ScriptBlock) => {
|
const handleEditBlock = (block: ScriptBlock) => {
|
||||||
setIsPauseWorkFlow(true);
|
from !== 'tab' && setIsPauseWorkFlow(true);
|
||||||
setIsInit(false);
|
setIsInit(false);
|
||||||
setEditBlockId(block.id);
|
setEditBlockId(block.id);
|
||||||
setActiveBlockId(block.id);
|
setActiveBlockId(block.id);
|
||||||
|
|||||||
@ -288,7 +288,7 @@ export function EditModal({
|
|||||||
whileTap={{ scale: 0.98 }}
|
whileTap={{ scale: 0.98 }}
|
||||||
onClick={() => {handleSave()}}
|
onClick={() => {handleSave()}}
|
||||||
>
|
>
|
||||||
Save
|
Apply
|
||||||
</motion.button>
|
</motion.button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user