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
This commit is contained in:
ajaysi
2026-04-07 12:49:43 +05:30
parent 813f9acc34
commit 1a456b21b7

View File

@@ -344,13 +344,25 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow
} }
}, [isResearching, project, selectedQueries, queries, researchProvider, preflightCheck, analysis, setResearch, setRawResearch, setScriptData, setShowScriptEditor, setShowRenderQueue, projectState.bible]); }, [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 () => { const handleGenerateScript = useCallback(async () => {
// Guard against double calls
if (isGeneratingRef.current) {
console.log('[ScriptGen] Already generating, skipping duplicate call');
return;
}
if (showScriptEditor) return; if (showScriptEditor) return;
if (!project || !research) { if (!project || !research) {
setAnnouncement("Project or research missing — cannot generate script"); setAnnouncement("Project or research missing — cannot generate script");
return; return;
} }
// Mark as generating immediately
isGeneratingRef.current = true;
setPreflightOperationName("Script Generation"); setPreflightOperationName("Script Generation");
const preflightResult = await preflightCheck.check({ const preflightResult = await preflightCheck.check({
provider: "gemini", provider: "gemini",
@@ -360,6 +372,7 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow
}); });
if (!preflightResult.can_proceed) { if (!preflightResult.can_proceed) {
isGeneratingRef.current = false; // Reset on preflight failure
return; return;
} }
@@ -401,8 +414,10 @@ export const usePodcastWorkflow = ({ projectState, onError }: UsePodcastWorkflow
} catch (error) { } catch (error) {
setIsGeneratingScript(false); setIsGeneratingScript(false);
announceError(setAnnouncement, setAnnouncementSeverityFn, error); 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) => { const handleProceedToRendering = useCallback((script: Script) => {
// Clear media cache for all scenes before proceeding to remove old blobs // Clear media cache for all scenes before proceeding to remove old blobs