From 93b9ae783c84cf121cb2db5a466fbdc81b79a092 Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Sat, 15 Mar 2025 15:29:24 +0800 Subject: [PATCH] run operations only on selected segments --- src/renderer/src/hooks/useSegments.ts | 15 +++++++++++---- src/renderer/src/segments.ts | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/hooks/useSegments.ts b/src/renderer/src/hooks/useSegments.ts index e88dc398..a836515c 100644 --- a/src/renderer/src/hooks/useSegments.ts +++ b/src/renderer/src/hooks/useSegments.ts @@ -106,7 +106,10 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea safeSetCutSegments([]); }, [clearSegColorCounter, safeSetCutSegments]); - const shuffleSegments = useCallback(() => safeSetCutSegments((oldSegments) => shuffleArray(oldSegments)), [safeSetCutSegments]); + const shuffleSegments = useCallback(() => safeSetCutSegments((existingSegments) => [ + ...existingSegments.filter((s) => !s.selected), + ...shuffleArray(existingSegments.filter((s) => s.selected)), + ]), [safeSetCutSegments]); // todo combine with safeSetCutSegments? const loadCutSegments = useCallback((edl: SegmentBase[], append: boolean) => { @@ -273,6 +276,7 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea }, [cutSegments, fileDuration, haveInvalidSegs]); const invertAllSegments = useCallback(() => { + // todo leave non selected segments as is? // treat markers as 0 length const sortedSegments = sortSegments(selectedSegments.map(({ end, ...rest }) => ({ ...rest, end: end ?? rest.start }))); @@ -302,7 +306,10 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea }, [createIndexedSegment, fileDuration, selectedSegments, safeSetCutSegments]); const combineOverlappingSegments = useCallback(() => { - safeSetCutSegments((existingSegments) => combineOverlappingSegments2(existingSegments)); + safeSetCutSegments((existingSegments) => [ + ...existingSegments.filter((s) => !s.selected), + ...combineOverlappingSegments2(existingSegments.filter((s) => s.selected)), // only process selected + ]); }, [safeSetCutSegments]); const combineSelectedSegments = useCallback(() => { @@ -693,8 +700,8 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea const value = await labelSegmentDialog({ currentName: name, maxLength: maxLabelLength }); if (value == null) return; safeSetCutSegments((existingSegments) => existingSegments.map((existingSegment) => { - if (selectedSegments.some((seg) => seg.segId === existingSegment.segId)) return { ...existingSegment, name: value }; - return existingSegment; + if (!existingSegment.selected) return existingSegment; + return { ...existingSegment, name: value }; })); }, [maxLabelLength, selectedSegments, safeSetCutSegments]); diff --git a/src/renderer/src/segments.ts b/src/renderer/src/segments.ts index 2668c629..c3139ee5 100644 --- a/src/renderer/src/segments.ts +++ b/src/renderer/src/segments.ts @@ -106,6 +106,7 @@ export function combineSelectedSegments(existingSegments: StateSegment[]) { return []; // remove other selected segments } + // pass through non selected segments return [existingSegment]; }); }