run operations only on selected segments

This commit is contained in:
Mikael Finstad
2025-03-15 15:29:24 +08:00
parent 08233f6e80
commit 93b9ae783c
2 changed files with 12 additions and 4 deletions
+11 -4
View File
@@ -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]);
+1
View File
@@ -106,6 +106,7 @@ export function combineSelectedSegments(existingSegments: StateSegment[]) {
return []; // remove other selected segments
}
// pass through non selected segments
return [existingSegment];
});
}