From 1a456b21b7aab4ac1987cedc59bfd2db8b494a70 Mon Sep 17 00:00:00 2001 From: ajaysi Date: Tue, 7 Apr 2026 12:49:43 +0530 Subject: [PATCH] Fix: Prevent duplicate script generation calls - Add isGeneratingRef to track if generation is in progress - Guard against double calls by checking ref before starting - Reset ref in finally block to allow subsequent generations - This fixes the issue where script generation was called twice in succession --- .../PodcastDashboard/usePodcastWorkflow.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/PodcastMaker/PodcastDashboard/usePodcastWorkflow.ts b/frontend/src/components/PodcastMaker/PodcastDashboard/usePodcastWorkflow.ts index 40216eac..a0fe155c 100644 --- a/frontend/src/components/PodcastMaker/PodcastDashboard/usePodcastWorkflow.ts +++ b/frontend/src/components/PodcastMaker/PodcastDashboard/usePodcastWorkflow.ts @@ -344,13 +344,25 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow } }, [isResearching, project, selectedQueries, queries, researchProvider, preflightCheck, analysis, setResearch, setRawResearch, setScriptData, setShowScriptEditor, setShowRenderQueue, projectState.bible]); + // Add a ref to track if we're currently generating to prevent double calls + const isGeneratingRef = React.useRef(false); + const handleGenerateScript = useCallback(async () => { + // Guard against double calls + if (isGeneratingRef.current) { + console.log('[ScriptGen] Already generating, skipping duplicate call'); + return; + } + if (showScriptEditor) return; if (!project || !research) { setAnnouncement("Project or research missing — cannot generate script"); return; } + // Mark as generating immediately + isGeneratingRef.current = true; + setPreflightOperationName("Script Generation"); const preflightResult = await preflightCheck.check({ provider: "gemini", @@ -360,6 +372,7 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow }); if (!preflightResult.can_proceed) { + isGeneratingRef.current = false; // Reset on preflight failure return; } @@ -401,8 +414,10 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow } catch (error) { setIsGeneratingScript(false); announceError(setAnnouncement, setAnnouncementSeverityFn, error); + } finally { + isGeneratingRef.current = false; // Reset when done } - }, [showScriptEditor, project, research, preflightCheck, setScriptData, setShowRenderQueue, setShowScriptEditor, rawResearch, projectState.knobs, projectState.bible]) + }, [showScriptEditor, project, research, preflightCheck, setScriptData, setShowRenderQueue, setShowScriptEditor, rawResearch, projectState.knobs, projectState.bible, analysis]) const handleProceedToRendering = useCallback((script: Script) => { // Clear media cache for all scenes before proceeding to remove old blobs