pull/2350/head
Mikael Finstad 2025-02-18 17:01:17 +08:00
rodzic 250218c625
commit 250218d93e
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 25AB36E3E81CBC26
2 zmienionych plików z 16 dodań i 16 usunięć

2
.gitignore vendored
Wyświetl plik

@ -16,5 +16,5 @@ node_modules
/build-resources
/doc
/ffmpeg
/app.log
/app*.log
/ts-dist

Wyświetl plik

@ -563,11 +563,11 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
if (segments) loadCutSegments(segments);
}, [checkFileOpened, duration, loadCutSegments]);
const enableSegments = useCallback((segmentsToEnable: { segId: string }[]) => {
if (segmentsToEnable.length === 0 || segmentsToEnable.length === cutSegments.length) return; // no point
const selectSegments = useCallback((segments: { segId: string }[]) => {
if (segments.length === 0 || segments.length === cutSegments.length) return; // no point in selecting none or all
setDeselectedSegmentIds((existing) => {
const ret = { ...existing };
segmentsToEnable.forEach(({ segId }) => { ret[segId] = false; });
segments.forEach(({ segId }) => { ret[segId] = false; });
return ret;
});
}, [cutSegments.length]);
@ -576,27 +576,27 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
const { name } = currentCutSeg;
const value = await selectSegmentsByLabelDialog(name);
if (value == null) return;
const segmentsToEnable = cutSegments.filter((seg) => (seg.name || '') === value);
enableSegments(segmentsToEnable);
}, [currentCutSeg, cutSegments, enableSegments]);
selectSegments(cutSegments.filter((seg) => seg.name === value));
}, [currentCutSeg, cutSegments, selectSegments]);
const selectAllMarkers = useCallback(() => {
enableSegments(cutSegments.filter((seg) => seg.end == null));
}, [cutSegments, enableSegments]);
selectSegments(cutSegments.filter((seg) => seg.end == null));
}, [cutSegments, selectSegments]);
const selectSegmentsByExpr = useCallback(async () => {
const matchSegment = async (seg: StateSegment, index: number, expr: string) => (
(await safeishEval(expr, { segment: getScopeSegment(seg, index) })) === true
);
const getSegmentsToEnable = async (expr: string) => (await pMap(cutSegments, async (seg, index) => (
((await matchSegment(seg, index, expr)) ? [seg] : [])
), { concurrency: 5 })).flat();
const getSegmentsToSelect = async (expr: string) => (
await pMap(cutSegments, async (seg, index) => (
((await matchSegment(seg, index, expr)) ? [seg] : [])
), { concurrency: 5 })).flat();
const value = await selectSegmentsByExprDialog(async (v: string) => {
try {
if (v.trim().length === 0) return i18n.t('Please enter a JavaScript expression.');
const segments = await getSegmentsToEnable(v);
const segments = await getSegmentsToSelect(v);
if (segments.length === 0) return i18n.t('No segments match this expression.');
if (segments.length === cutSegments.length) return i18n.t('All segments match this expression.');
return undefined;
@ -609,9 +609,9 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
});
if (value == null) return;
const segmentsToEnable = await getSegmentsToEnable(value);
enableSegments(segmentsToEnable);
}, [cutSegments, enableSegments, getScopeSegment]);
const segmentsToSelect = await getSegmentsToSelect(value);
selectSegments(segmentsToSelect);
}, [cutSegments, selectSegments, getScopeSegment]);
const mutateSegmentsByExpr = useCallback(async () => {
async function mutateSegment(seg: StateSegment, index: number, expr: string) {