@ -147,7 +147,6 @@ const App = memo(() => {
const [ timelineMode , setTimelineMode ] = useState ( ) ;
const [ keyframesEnabled , setKeyframesEnabled ] = useState ( true ) ;
const [ showRightBar , setShowRightBar ] = useState ( true ) ;
const [ cleanupChoices , setCleanupChoices ] = useState ( { tmpFiles : true } ) ;
const [ rememberConvertToSupportedFormat , setRememberConvertToSupportedFormat ] = useState ( ) ;
const [ lastCommandsVisible , setLastCommandsVisible ] = useState ( false ) ;
const [ settingsVisible , setSettingsVisible ] = useState ( false ) ;
@ -180,7 +179,7 @@ const App = memo(() => {
const allUserSettings = useUserSettingsRoot ( ) ;
const {
captureFormat , setCaptureFormat , customOutDir , setCustomOutDir , keyframeCut , setKeyframeCut , preserveMovData , setPreserveMovData , movFastStart , setMovFastStart , avoidNegativeTs , autoMerge , timecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , askBeforeClose , enableAskForImportChapters , enableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , wheelSensitivity , invertTimelineScroll , language , ffmpegExperimental , hideNotifications , autoLoadTimecode , autoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , setSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , keyboardNormalSeekSpeed , enableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , enableAutoHtml5ify , segmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , customFfPath , storeProjectInWorkingDir , enableOverwriteOutput , mouseWheelZoomModifierKey , captureFrameMethod , captureFrameQuality , captureFrameFileNameFormat , enableNativeHevc ,
captureFormat , setCaptureFormat , customOutDir , setCustomOutDir , keyframeCut , setKeyframeCut , preserveMovData , setPreserveMovData , movFastStart , setMovFastStart , avoidNegativeTs , autoMerge , timecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , askBeforeClose , enableAskForImportChapters , enableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , wheelSensitivity , invertTimelineScroll , language , ffmpegExperimental , hideNotifications , autoLoadTimecode , autoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , setSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , keyboardNormalSeekSpeed , enableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , enableAutoHtml5ify , segmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , customFfPath , storeProjectInWorkingDir , enableOverwriteOutput , mouseWheelZoomModifierKey , captureFrameMethod , captureFrameQuality , captureFrameFileNameFormat , enableNativeHevc , cleanupChoices , setCleanupChoices ,
} = allUserSettings ;
useEffect ( ( ) => {
@ -823,7 +822,7 @@ const App = memo(() => {
setSelectedBatchFiles ( [ ] ) ;
} , [ askBeforeClose ] ) ;
const batch RemoveFile = useCallback ( ( path ) => {
const batch List RemoveFile = useCallback ( ( path ) => {
setBatchFiles ( ( existingBatch ) => {
const index = existingBatch . findIndex ( ( existingFile ) => existingFile . path === path ) ;
if ( index < 0 ) return existingBatch ;
@ -947,41 +946,52 @@ const App = memo(() => {
/ / S t o r e p a t h s b e f o r e w e r e s e t s t a t e
const savedPaths = { previewFilePath , sourceFilePath : filePath , projectFilePath : projectFileSavePath } ;
resetState ( ) ;
batchRemoveFile ( savedPaths . sourceFilePath ) ;
batchListRemoveFile ( savedPaths . sourceFilePath ) ;
if ( ! cleanupChoices2 . tmpFiles && ! cleanupChoices2 . projectFile && ! cleanupChoices2 . sourceFile ) return ;
/ / c l o s e t h e f i l e
resetState ( ) ;
try {
setWorking ( i18n . t ( 'Cleaning up' ) ) ;
console . log ( 'trashing' , cleanupChoices2 ) ;
await deleteFiles ( { toDelete : cleanupChoices2 , paths : savedPaths } ) ;
console . log ( 'Cleaning up files' , cleanupChoices2 ) ;
const pathsToDelete = [ ] ;
if ( cleanupChoices2 . trashTmpFiles && savedPaths . previewFilePath ) pathsToDelete . push ( savedPaths . previewFilePath ) ;
if ( cleanupChoices2 . trashProjectFile && savedPaths . projectFilePath ) pathsToDelete . push ( savedPaths . projectFilePath ) ;
if ( cleanupChoices2 . trashSourceFile && savedPaths . sourceFilePath ) pathsToDelete . push ( savedPaths . sourceFilePath ) ;
await deleteFiles ( pathsToDelete , cleanupChoices2 . deleteIfTrashFails ) ;
} catch ( err ) {
errorToast ( i18n . t ( 'Unable to delete file: {{message}}' , { message : err . message } ) ) ;
console . error ( err ) ;
}
} , [ batchRemoveFile , filePath , previewFilePath , projectFileSavePath , resetState , setWorking ] ) ;
} , [ batchListRemoveFile , filePath , previewFilePath , projectFileSavePath , resetState , setWorking ] ) ;
const askForCleanupChoices = useCallback ( async ( ) => {
const trashResponse = await showCleanupFilesDialog ( cleanupChoices ) ;
if ( ! trashResponse ) return undefined ; / / C a n c e l e d
setCleanupChoices ( trashResponse ) ; / / S t o r e f o r n e x t t i m e
return trashResponse ;
} , [ cleanupChoices , setCleanupChoices ] ) ;
const cleanupFilesDialog = useCallback ( async ( ) => {
if ( ! isFileOpened ) return ;
let trashResponse = cleanupChoices ;
if ( ! cleanupChoices . dontShowAgain ) {
trashResponse = await showCleanupFilesDialog ( cleanupChoices ) ;
console . log ( 'trashResponse' , trashResponse ) ;
if ( ! trashResponse ) return ; / / C a n c e l l e d
setCleanupChoices ( trashResponse ) ; / / S t o r e f o r n e x t t i m e
let response = cleanupChoices ;
if ( cleanupChoices . askForCleanup ) {
response = await askForCleanupChoices ( ) ;
console . log ( 'trashResponse' , response ) ;
if ( ! response ) return ; / / C a n c e l e d
}
if ( workingRef . current ) return ;
try {
await cleanupFiles ( t rashR esponse) ;
await cleanupFiles ( response) ;
} finally {
setWorking ( ) ;
}
} , [ isFileOpened , cleanupChoices , cleanupFiles, setWorking ] ) ;
} , [ isFileOpened , cleanupChoices , askForCleanupChoices, cleanupFiles, setWorking ] ) ;
/ / F o r i n v e r t C u t S e g m e n t s w e d o n o t s u p p o r t f i l t e r i n g
const selectedSegmentsOrInverseRaw = useMemo ( ( ) => ( invertCutSegments ? inverseCutSegments : selectedSegmentsRaw ) , [ inverseCutSegments , invertCutSegments , selectedSegmentsRaw ] ) ;
@ -2118,7 +2128,7 @@ const App = memo(() => {
batchFiles = { batchFiles }
setBatchFiles = { setBatchFiles }
onBatchFileSelect = { onBatchFileSelect }
batch RemoveFile= { batch RemoveFile}
batch List RemoveFile= { batch List RemoveFile}
closeBatch = { closeBatch }
onMergeFilesClick = { concatCurrentBatch }
onBatchConvertToSupportedFormatClick = { convertFormatBatch }
@ -2349,6 +2359,7 @@ const App = memo(() => {
< Settings
onTunerRequested = { onTunerRequested }
onKeyboardShortcutsDialogRequested = { toggleKeyboardShortcuts }
askForCleanupChoices = { askForCleanupChoices }
/ >
< / Table.Body >
< / Table >