@ -197,7 +197,7 @@ const App = memo(() => {
const zoomedDuration = isDurationValid ( duration ) ? duration / zoom : undefined ;
const {
captureFormat , setCaptureFormat , customOutDir , setCustomOutDir , keyframeCut , setKeyframeCut , preserveMovData , setPreserveMovData , movFastStart , setMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , simpleMode , setSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut , customFfPath , setCustomFfPath ,
captureFormat , setCaptureFormat , customOutDir , setCustomOutDir , keyframeCut , setKeyframeCut , preserveMovData , setPreserveMovData , movFastStart , setMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , simpleMode , setSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut , customFfPath , setCustomFfPath , storeProjectInWorkingDir , setStoreProjectInWorkingDir ,
} = useUserSettingsRoot ( ) ;
useEffect ( ( ) => {
@ -556,16 +556,16 @@ const App = memo(() => {
const projectSuffix = 'proj.llc' ;
const oldProjectSuffix = 'llc-edl.csv' ;
/ / N e w L L C f o r m a t is s t o r e d a l o n g w i t h i n p u t f i l e ht t p s : / / g i t h u b . c o m / m i f i / l o s s l e s s - c u t / i s s u e s / 9 0 5
const getEdlFilePath = useCallback ( ( fp ) => getOutPath ( { filePath: fp , nameSuffix : projectSuffix } ) , [ ] ) ;
/ / N e w L L C f o r m a t ca n b e s t o r e d a l o n g w i t h i n p u t f i l e or i n w o r k i n g d i r ( c u s t o m O u t D i r )
const getEdlFilePath = useCallback ( ( fp , storeProjectInWorkingDir2 = false ) => getOutPath ( { customOutDir: storeProjectInWorkingDir2 ? customOutDir : undefined , filePath: fp , nameSuffix : projectSuffix } ) , [ customOutDir ] ) ;
/ / O l d v e r s i o n s o f L o s s l e s s C u t u s e d C S V f i l e s a n d s t o r e d t h e m i n c u s t o m O u t D i r :
const getEdlFilePathOld = useCallback ( ( fp ) => getOutPath ( { customOutDir , filePath : fp , nameSuffix : oldProjectSuffix } ) , [ customOutDir ] ) ;
const edlFil ePath = useMemo ( ( ) => getEdlFilePath ( filePath ), [ getEdlFilePath , filePath ] ) ;
const projectFileSav ePath = useMemo ( ( ) => getEdlFilePath ( filePath , storeProjectInWorkingDir ), [ getEdlFilePath , filePath , storeProjectInWorkingDir ] ) ;
const currentSaveOperation = useMemo ( ( ) => {
if ( ! edlFil ePath) return undefined ;
return { cutSegments , edlFil ePath, filePath } ;
} , [ cutSegments , edlFilePath, fil ePath] ) ;
if ( ! projectFileSav ePath) return undefined ;
return { cutSegments , projectFileSav ePath, filePath } ;
} , [ cutSegments , filePath, projectFileSav ePath] ) ;
const [ debouncedSaveOperation ] = useDebounce ( currentSaveOperation , isDev ? 2000 : 500 ) ;
@ -575,18 +575,16 @@ const App = memo(() => {
/ / N O T E : C o u l d l o s e a s a v e i f u s e r c l o s e s t o o f a s t , b u t n o t a b i g i s s u e I t h i n k
if ( ! autoSaveProjectFile || ! debouncedSaveOperation ) return ;
const { cutSegments : saveOperationCutSegments , edlFilePath : saveOperationEdlFilePath , filePath : saveOperationFilePath } = debouncedSaveOperation ;
try {
/ / I n i t i a l s t a t e ? D o n ' t s a v e ( s a m e a s c r e a t e I n i t i a l C u t S e g m e n t s b u t w i t h o u t c o u n t i n g )
if ( isEqual ( getCleanCutSegments ( saveOperationC utSegments) , getCleanCutSegments ( [ createSegment ( ) ] ) ) ) return ;
if ( isEqual ( getCleanCutSegments ( debouncedSaveOperation. c utSegments) , getCleanCutSegments ( [ createSegment ( ) ] ) ) ) return ;
if ( lastSaveOperation . current && lastSaveOperation . current . edlFilePath === saveOperationEdlFil ePath && isEqual ( getCleanCutSegments ( lastSaveOperation . current . cutSegments ) , getCleanCutSegments ( saveOperationC utSegments) ) ) {
if ( lastSaveOperation . current && lastSaveOperation . current . projectFileSavePath === debouncedSaveOperation . projectFileSav ePath && isEqual ( getCleanCutSegments ( lastSaveOperation . current . cutSegments ) , getCleanCutSegments ( debouncedSaveOperation. c utSegments) ) ) {
console . log ( 'Segments unchanged, skipping save' ) ;
return ;
}
await saveLlcProject ( { savePath : saveOperationEdlFilePath, filePath : saveOperationFilePath , cutSegments : saveOperationC utSegments } ) ;
await saveLlcProject ( { savePath : debouncedSaveOperation. projectFileSavePath , filePath : debouncedSaveOperation . filePath , cutSegments : debouncedSaveOperation . c utSegments } ) ;
lastSaveOperation . current = debouncedSaveOperation ;
} catch ( err ) {
errorToast ( i18n . t ( 'Unable to save project file' ) ) ;
@ -628,12 +626,13 @@ const App = memo(() => {
} , [ hideAllNotifications , fileFormat ] ) ;
const ensureAccessibleDirectories = useCallback ( async ( { inputPath , checkInputDir } ) => {
/ / M a c O S A p p S t o r e bu i l d s d o n ' t a l l o w w r i t i n g a n y w h e r e , a n d w e s e t t h e f l a g c o m . a p p l e . s e c u r i t y . f i l e s . u s e r - s e l e c t e d . r e a d - w r i t e
/ / M a c O S A p p S t o r e sa n d b o x d o e s n ' t a l l o w w r i t i n g a n y w h e r e , a n d w e s e t t h e f l a g c o m . a p p l e . s e c u r i t y . f i l e s . u s e r - s e l e c t e d . r e a d - w r i t e
/ / W i t h t h i s f l a g , w e c a n s h o w t h e u s e r a n o p e n - d i a l o g f o r a d i r e c t o r y , a n d o n c e t h e u s e r h a s o p e n e d t h a t d i r e c t o r y , w e c a n w r i t e f i l e s t h e r e u n t i l t h e a p p i s r e s t a r t e d .
/ / N O T E : w h e n M A S ( d e v ) b u i l d , A p p l i c a t i o n S u p p o r t w i l l i n s t e a d b e h e r e :
/ / ~ / L i b r a r y / C o n t a i n e r s / n o . m i f i . l o s s l e s s c u t - m a c / D a t a / L i b r a r y / A p p l i c a t i o n S u p p o r t
/ / T o s t a r t f r o m s c r a t c h : r m - r f ~ / L i b r a r y / C o n t a i n e r s / n o . m i f i . l o s s l e s s c u t - m a c
const simulateMasBuild = false ; / / i s D e v ; / / c a n b e u s e d f o r t e s t i n g w i t h o u t h a v i n g t o b u i l d m a s - d e v
/ / c o n s t s i m u l a t e M a s B u i l d = i s D e v ; / / c a n b e u s e d f o r t e s t i n g t h i s l o g i c w i t h o u t h a v i n g t o b u i l d m a s - d e v
const simulateMasBuild = false ;
const masMode = isMasBuild || simulateMasBuild ;
@ -754,8 +753,8 @@ const App = memo(() => {
} ) , [ hideAllNotifications , setSimpleMode ] ) ;
const userSettingsContext = useMemo ( ( ) => ( {
captureFormat , setCaptureFormat , toggleCaptureFormat , customOutDir , setCustomOutDir , changeOutDir , keyframeCut , setKeyframeCut , toggleKeyframeCut , preserveMovData , setPreserveMovData , togglePreserveMovData , movFastStart , setMovFastStart , toggleMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , toggleExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , toggleSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , togglePreserveMetadataOnMerge , simpleMode , setSimpleMode , toggleSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , toggleSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut , customFfPath , setCustomFfPath ,
} ) , [ askBeforeClose , autoDeleteMergedSegments , autoExportExtraStreams , autoLoadTimecode , autoMerge , autoSaveProjectFile , avoidNegativeTs , captureFormat , changeOutDir , customFfPath , customOutDir , enableAskForFileOpenAction , enableAskForImportChapters , enableAutoHtml5ify , enableSmartCut , enableTransferTimestamps , exportConfirmEnabled , ffmpegExperimental , hideNotifications , invertCutSegments , invertTimelineScroll , keyBindings , keyboardNormalSeekSpeed , keyboardSeekAccFactor , keyframeCut , language , movFastStart , outFormatLocked , outSegTemplate , playbackVolume , preserveMetadataOnMerge , preserveMovData , resetKeyBindings , safeOutputFileName , segmentsToChapters , segmentsToChaptersOnly , setAskBeforeClose , setAutoDeleteMergedSegments , setAutoExportExtraStreams , setAutoLoadTimecode , setAutoMerge , setAutoSaveProjectFile , setAvoidNegativeTs , setCaptureFormat , setCustomFfPath , setCustomOutDir , setEnableAskForFileOpenAction , setEnableAskForImportChapters , setEnableAutoHtml5ify , setEnableSmartCut , setEnableTransferTimestamps , setExportConfirmEnabled , setFfmpegExperimental , setHideNotifications , setInvertCutSegments , setInvertTimelineScroll , setKeyBindings , setKeyboardNormalSeekSpeed , setKeyboardSeekAccFactor , setKeyframeCut , setLanguage , setMovFastStart , setOutFormatLocked , setOutSegTemplate , setPlaybackVolume , setPreserveMetadataOnMerge , setPreserveMovData , setSafeOutputFileName , setSegmentsToChapters , setSegmentsToChaptersOnly , setSimpleMode , set TimecodeFormat, setWheelSensitivity , simpleMode , timecodeFormat , toggleCaptureFormat , toggleExportConfirmEnabled , toggleKeyframeCut , toggleMovFastStart , togglePreserveMetadataOnMerge , togglePreserveMovData , toggleSafeOutputFileName , toggleSegmentsToChapters , toggleSimpleMode , wheelSensitivity ] ) ;
captureFormat , setCaptureFormat , toggleCaptureFormat , customOutDir , setCustomOutDir , changeOutDir , keyframeCut , setKeyframeCut , toggleKeyframeCut , preserveMovData , setPreserveMovData , togglePreserveMovData , movFastStart , setMovFastStart , toggleMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , toggleExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , toggleSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , togglePreserveMetadataOnMerge , simpleMode , setSimpleMode , toggleSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , toggleSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut , customFfPath , setCustomFfPath , storeProjectInWorkingDir , setStoreProjectInWorkingDir ,
} ) , [ askBeforeClose , autoDeleteMergedSegments , autoExportExtraStreams , autoLoadTimecode , autoMerge , autoSaveProjectFile , avoidNegativeTs , captureFormat , changeOutDir , customFfPath , customOutDir , enableAskForFileOpenAction , enableAskForImportChapters , enableAutoHtml5ify , enableSmartCut , enableTransferTimestamps , exportConfirmEnabled , ffmpegExperimental , hideNotifications , invertCutSegments , invertTimelineScroll , keyBindings , keyboardNormalSeekSpeed , keyboardSeekAccFactor , keyframeCut , language , movFastStart , outFormatLocked , outSegTemplate , playbackVolume , preserveMetadataOnMerge , preserveMovData , resetKeyBindings , safeOutputFileName , segmentsToChapters , segmentsToChaptersOnly , setAskBeforeClose , setAutoDeleteMergedSegments , setAutoExportExtraStreams , setAutoLoadTimecode , setAutoMerge , setAutoSaveProjectFile , setAvoidNegativeTs , setCaptureFormat , setCustomFfPath , setCustomOutDir , setEnableAskForFileOpenAction , setEnableAskForImportChapters , setEnableAutoHtml5ify , setEnableSmartCut , setEnableTransferTimestamps , setExportConfirmEnabled , setFfmpegExperimental , setHideNotifications , setInvertCutSegments , setInvertTimelineScroll , setKeyBindings , setKeyboardNormalSeekSpeed , setKeyboardSeekAccFactor , setKeyframeCut , setLanguage , setMovFastStart , setOutFormatLocked , setOutSegTemplate , setPlaybackVolume , setPreserveMetadataOnMerge , setPreserveMovData , setSafeOutputFileName , setSegmentsToChapters , setSegmentsToChaptersOnly , setSimpleMode , set StoreProjectInWorkingDir, set TimecodeFormat, setWheelSensitivity , simpleMode , storeProjectInWorkingDir , timecodeFormat , toggleCaptureFormat , toggleExportConfirmEnabled , toggleKeyframeCut , toggleMovFastStart , togglePreserveMetadataOnMerge , togglePreserveMovData , toggleSafeOutputFileName , toggleSegmentsToChapters , toggleSimpleMode , wheelSensitivity ] ) ;
const isCopyingStreamId = useCallback ( ( path , streamId ) => (
! ! ( copyStreamIdsByFile [ path ] || { } ) [ streamId ]
@ -1105,11 +1104,11 @@ const App = memo(() => {
if ( workingRef . current ) return ;
/ / B e c a u s e w e w i l l r e s e t s t a t e b e f o r e d e l e t i n g f i l e s
const savedPaths = { previewFilePath , filePath, edlFil ePath } ;
const savedPaths = { previewFilePath , sourceFilePath: filePath , projectFilePath : projectFileSav ePath } ;
resetState ( ) ;
batchRemoveFile ( savedPaths . f ilePath) ;
batchRemoveFile ( savedPaths . sourceF ilePath) ;
if ( ! trashResponse . tmpFiles && ! trashResponse . projectFile && ! trashResponse . sourceFile ) return ;
@ -1123,7 +1122,7 @@ const App = memo(() => {
} finally {
setWorking ( ) ;
}
} , [ previewFilePath, filePath , edlFilePath , cleanupChoices , isFileOpened , resetState , batchRemoveFile , setWorking ] ) ;
} , [ isFileOpened, cleanupChoices , previewFilePath , filePath , projectFileSavePath , resetState , batchRemoveFile , setWorking ] ) ;
const inverseOrNormalSegments = useMemo ( ( ) => (
invertCutSegments ? inverseCutSegments : apparentCutSegments
@ -1443,6 +1442,36 @@ const App = memo(() => {
return true ;
}
async function tryOpenProjectPath ( path , type ) {
if ( ! ( await exists ( path ) ) ) return false ;
await loadEdlFile ( { path , type } ) ;
return true ;
}
async function tryOpenProject ( { chapters } ) {
try {
if ( projectPath ) {
await loadEdlFile ( { path : projectPath , type : 'llc' } ) ;
return ;
}
/ / F i r s t t r y t o o p e n f r o m s o u r c e f i l e d i r , t h e n f r o m w o r k i n g d i r , t h e n f i n a l l y o l d c s v s t y l e p r o j e c t
if ( await tryOpenProjectPath ( getEdlFilePath ( fp , true ) , 'llc' ) ) return ;
if ( await tryOpenProjectPath ( getEdlFilePath ( fp , false ) , 'llc' ) ) return ;
if ( await tryOpenProjectPath ( getEdlFilePathOld ( fp ) , 'csv' ) ) return ;
const edl = await tryMapChaptersToEdl ( chapters ) ;
if ( edl . length > 0 && enableAskForImportChapters && ( await askForImportChapters ( ) ) ) {
console . log ( 'Convert chapters to segments' , edl ) ;
loadCutSegments ( edl ) ;
}
} catch ( err ) {
console . error ( 'EDL load failed, but continuing' , err ) ;
errorToast ( ` ${ i18n . t ( 'Failed to load segments' ) } ( ${ err . message } ) ` ) ;
}
}
try {
const fileMeta = await readFileMeta ( fp ) ;
/ / c o n s o l e . l o g ( ' f i l e m e t a r e a d ' , f i l e M e t a ) ;
@ -1485,27 +1514,7 @@ const App = memo(() => {
await html5ifyAndLoadWithPreferences ( cod , fp , 'fastest' , haveVideoStream , haveAudioStream ) ;
}
try {
const openedFileEdlPath = getEdlFilePath ( fp ) ;
const openedFileEdlPathOld = getEdlFilePathOld ( fp ) ;
if ( projectPath ) {
await loadEdlFile ( { path : projectPath , type : 'llc' } ) ;
} else if ( await exists ( openedFileEdlPath ) ) {
await loadEdlFile ( { path : openedFileEdlPath , type : 'llc' } ) ;
} else if ( await exists ( openedFileEdlPathOld ) ) {
await loadEdlFile ( { path : openedFileEdlPathOld , type : 'csv' } ) ;
} else {
const edl = await tryMapChaptersToEdl ( fileMeta . chapters ) ;
if ( edl . length > 0 && enableAskForImportChapters && ( await askForImportChapters ( ) ) ) {
console . log ( 'Convert chapters to segments' , edl ) ;
loadCutSegments ( edl ) ;
}
}
} catch ( err ) {
console . error ( 'EDL load failed, but continuing' , err ) ;
errorToast ( ` ${ i18n . t ( 'Failed to load segments' ) } ( ${ err . message } ) ` ) ;
}
await tryOpenProject ( { chapters : fileMeta . chapters } ) ;
/ / t h r o w n e w E r r o r ( ' t e s t ' ) ;
@ -1581,12 +1590,12 @@ const App = memo(() => {
return ;
}
/ / c h e c k I n p u t D i r : t r u e b e c a u s e w e wi l l b e w r i t i n g p r o j e c t f i l e h e r e
const { newCustomOutDir , cancel } = await ensureAccessibleDirectories ( { inputPath : path , checkInputDir : true } ) ;
/ / c h e c k I n p u t D i r : t r u e b e c a u s e w e ma y b e b e w r i t i n g p r o j e c t f i l e h e r e ( i f s t o r e P r o j e c t I n W o r k i n g D i r i s t r u e )
const { newCustomOutDir , cancel } = await ensureAccessibleDirectories ( { inputPath : path , checkInputDir : ! storeProjectInWorkingDir } ) ;
if ( cancel ) return ;
await loadMedia ( { filePath : path , customOutDir : newCustomOutDir , projectPath } ) ;
} , [ ensureAccessibleDirectories , loadMedia ]) ;
} , [ ensureAccessibleDirectories , loadMedia , storeProjectInWorkingDir ]) ;
const batchOpenSingleFile = useCallback ( async ( path ) => {
if ( workingRef . current ) return ;
@ -1964,7 +1973,7 @@ const App = memo(() => {
open : isFileOpened ? i18n . t ( 'Open the file instead of the current one' ) : i18n . t ( 'Open the file' ) ,
} ;
if ( isFileOpened ) {
if ( isLlcProject ) inputOptions . project = i18n . t ( 'Load segments from the new file, but keep the current media' ) ;
if ( isLlcProject ) inputOptions . project = i18n . t ( 'Load segments from the new file, but keep the current media' ) ;
else inputOptions . tracks = i18n . t ( 'Include all tracks from the new file' ) ;
}
if ( batchFiles . length > 0 ) inputOptions . addToBatch = i18n . t ( 'Add the file to the batch list' ) ;