Add merge+segments option #480

pull/640/head
Mikael Finstad 6 years ago
parent f9ce69ee5f
commit 95db959f5b
No known key found for this signature in database
GPG Key ID: 25AB36E3E81CBC26

@ -606,8 +606,6 @@ const App = memo(() => {
return newVal; return newVal;
}), [hideAllNotifications, setKeyframeCut]); }), [hideAllNotifications, setKeyframeCut]);
const toggleAutoMerge = useCallback(() => setAutoMerge(val => !val), [setAutoMerge]);
const togglePreserveMovData = useCallback(() => setPreserveMovData((val) => !val), [setPreserveMovData]); const togglePreserveMovData = useCallback(() => setPreserveMovData((val) => !val), [setPreserveMovData]);
const toggleMovFastStart = useCallback(() => setMovFastStart((val) => !val), [setMovFastStart]); const toggleMovFastStart = useCallback(() => setMovFastStart((val) => !val), [setMovFastStart]);
@ -2260,7 +2258,7 @@ const App = memo(() => {
</div> </div>
</motion.div> </motion.div>
<ExportConfirm filePath={filePath} autoMerge={autoMerge} toggleAutoMerge={toggleAutoMerge} areWeCutting={areWeCutting} outSegments={outSegments} visible={exportConfirmVisible} onClosePress={closeExportConfirm} onExportConfirm={onExportConfirm} keyframeCut={keyframeCut} toggleKeyframeCut={toggleKeyframeCut} renderOutFmt={renderOutFmt} preserveMovData={preserveMovData} togglePreserveMovData={togglePreserveMovData} movFastStart={movFastStart} toggleMovFastStart={toggleMovFastStart} avoidNegativeTs={avoidNegativeTs} setAvoidNegativeTs={setAvoidNegativeTs} changeOutDir={changeOutDir} outputDir={outputDir} numStreamsTotal={numStreamsTotal} numStreamsToCopy={numStreamsToCopy} setStreamsSelectorShown={setStreamsSelectorShown} currentSegIndex={currentSegIndexSafe} invertCutSegments={invertCutSegments} exportConfirmEnabled={exportConfirmEnabled} toggleExportConfirmEnabled={toggleExportConfirmEnabled} segmentsToChapters={segmentsToChapters} toggleSegmentsToChapters={toggleSegmentsToChapters} outFormat={fileFormat} preserveMetadataOnMerge={preserveMetadataOnMerge} togglePreserveMetadataOnMerge={togglePreserveMetadataOnMerge} setOutSegTemplate={setOutSegTemplate} outSegTemplate={outSegTemplateOrDefault} generateOutSegFileNames={generateOutSegFileNames} currentSegIndexSafe={currentSegIndexSafe} isOutSegFileNamesValid={isOutSegFileNamesValid} /> <ExportConfirm filePath={filePath} autoMerge={autoMerge} setAutoMerge={setAutoMerge} areWeCutting={areWeCutting} outSegments={outSegments} visible={exportConfirmVisible} onClosePress={closeExportConfirm} onExportConfirm={onExportConfirm} keyframeCut={keyframeCut} toggleKeyframeCut={toggleKeyframeCut} renderOutFmt={renderOutFmt} preserveMovData={preserveMovData} togglePreserveMovData={togglePreserveMovData} movFastStart={movFastStart} toggleMovFastStart={toggleMovFastStart} avoidNegativeTs={avoidNegativeTs} setAvoidNegativeTs={setAvoidNegativeTs} changeOutDir={changeOutDir} outputDir={outputDir} numStreamsTotal={numStreamsTotal} numStreamsToCopy={numStreamsToCopy} setStreamsSelectorShown={setStreamsSelectorShown} currentSegIndex={currentSegIndexSafe} invertCutSegments={invertCutSegments} exportConfirmEnabled={exportConfirmEnabled} toggleExportConfirmEnabled={toggleExportConfirmEnabled} segmentsToChapters={segmentsToChapters} toggleSegmentsToChapters={toggleSegmentsToChapters} outFormat={fileFormat} preserveMetadataOnMerge={preserveMetadataOnMerge} togglePreserveMetadataOnMerge={togglePreserveMetadataOnMerge} setOutSegTemplate={setOutSegTemplate} outSegTemplate={outSegTemplateOrDefault} generateOutSegFileNames={generateOutSegFileNames} currentSegIndexSafe={currentSegIndexSafe} isOutSegFileNamesValid={isOutSegFileNamesValid} autoDeleteMergedSegments={autoDeleteMergedSegments} setAutoDeleteMergedSegments={setAutoDeleteMergedSegments} />
<HelpSheet <HelpSheet
visible={helpVisible} visible={helpVisible}

@ -41,11 +41,11 @@ const HelpIcon = ({ onClick }) => <IoIosHelpCircle size={20} role="button" onCli
const ExportConfirm = memo(({ const ExportConfirm = memo(({
autoMerge, areWeCutting, outSegments, visible, onClosePress, onExportConfirm, keyframeCut, toggleKeyframeCut, autoMerge, areWeCutting, outSegments, visible, onClosePress, onExportConfirm, keyframeCut, toggleKeyframeCut,
toggleAutoMerge, renderOutFmt, preserveMovData, togglePreserveMovData, movFastStart, toggleMovFastStart, avoidNegativeTs, setAvoidNegativeTs, setAutoMerge, renderOutFmt, preserveMovData, togglePreserveMovData, movFastStart, toggleMovFastStart, avoidNegativeTs, setAvoidNegativeTs,
changeOutDir, outputDir, numStreamsTotal, numStreamsToCopy, setStreamsSelectorShown, currentSegIndex, invertCutSegments, changeOutDir, outputDir, numStreamsTotal, numStreamsToCopy, setStreamsSelectorShown, currentSegIndex, invertCutSegments,
exportConfirmEnabled, toggleExportConfirmEnabled, segmentsToChapters, toggleSegmentsToChapters, outFormat, exportConfirmEnabled, toggleExportConfirmEnabled, segmentsToChapters, toggleSegmentsToChapters, outFormat,
preserveMetadataOnMerge, togglePreserveMetadataOnMerge, outSegTemplate, setOutSegTemplate, generateOutSegFileNames, preserveMetadataOnMerge, togglePreserveMetadataOnMerge, outSegTemplate, setOutSegTemplate, generateOutSegFileNames,
filePath, currentSegIndexSafe, isOutSegFileNamesValid, filePath, currentSegIndexSafe, isOutSegFileNamesValid, autoDeleteMergedSegments, setAutoDeleteMergedSegments,
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
@ -118,7 +118,7 @@ const ExportConfirm = memo(({
<div style={boxStyle}> <div style={boxStyle}>
<h2 style={{ marginTop: 0 }}>{t('Export options')}</h2> <h2 style={{ marginTop: 0 }}>{t('Export options')}</h2>
<ul> <ul>
{outSegments.length >= 2 && <li>{t('Merge {{segments}} cut segments to one file?', { segments: outSegments.length })} <MergeExportButton autoMerge={autoMerge} outSegments={outSegments} toggleAutoMerge={toggleAutoMerge} /></li>} {outSegments.length >= 2 && <li>{t('Merge {{segments}} cut segments to one file?', { segments: outSegments.length })} <MergeExportButton autoMerge={autoMerge} outSegments={outSegments} setAutoMerge={setAutoMerge} autoDeleteMergedSegments={autoDeleteMergedSegments} setAutoDeleteMergedSegments={setAutoDeleteMergedSegments} /></li>}
<li> <li>
{t('Output container format:')} {renderOutFmt({ height: 20, maxWidth: 150 })} {t('Output container format:')} {renderOutFmt({ height: 20, maxWidth: 150 })}
<HelpIcon onClick={onOutFmtHelpPress} /> <HelpIcon onClick={onOutFmtHelpPress} />

@ -6,19 +6,55 @@ import { MdCallSplit, MdCallMerge } from 'react-icons/md';
import { withBlur } from '../util'; import { withBlur } from '../util';
const MergeExportButton = memo(({ autoMerge, outSegments, toggleAutoMerge }) => { const MergeExportButton = memo(({ autoMerge, outSegments, setAutoMerge, autoDeleteMergedSegments, setAutoDeleteMergedSegments }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const AutoMergeIcon = autoMerge ? MdCallMerge : MdCallSplit; const AutoMergeIcon = autoMerge ? MdCallMerge : MdCallSplit;
let effectiveMode;
let title;
let description;
if (autoMerge && autoDeleteMergedSegments) {
effectiveMode = 'merge';
title = t('Merge cuts');
description = t('Auto merge segments to one file after export');
} else if (autoMerge) {
effectiveMode = 'merge+separate';
title = t('Merge & Separate');
description = t('Auto merge segments to one file after export, but keep segments too');
} else {
effectiveMode = 'separate';
title = t('Separate files');
description = t('Export to separate files');
}
function onClick() {
switch (effectiveMode) {
case 'merge': {
setAutoDeleteMergedSegments(false);
break;
}
case 'merge+separate': {
setAutoMerge(false);
break;
}
case 'separate': {
setAutoMerge(true);
setAutoDeleteMergedSegments(true);
break;
}
default:
}
}
return ( return (
<Button <Button
height={20} height={20}
style={{ opacity: outSegments && outSegments.length < 2 ? 0.4 : undefined }} style={{ opacity: outSegments && outSegments.length < 2 ? 0.4 : undefined }}
title={autoMerge ? t('Auto merge segments to one file after export') : t('Export to separate files')} title={description}
onClick={withBlur(toggleAutoMerge)} onClick={withBlur(onClick)}
> >
<AutoMergeIcon /> {autoMerge ? t('Merge cuts') : t('Separate files')} <AutoMergeIcon /> {title}
</Button> </Button>
); );
}); });

Loading…
Cancel
Save