@@ -641,8 +641,8 @@ async function store(state, emitter) {
641641 state . renamingFile = source
642642 emitter . emit ( 'render' )
643643 } )
644- emitter . on ( 'finish-renaming' , async ( value ) => {
645- log ( 'finish-renaming' , value )
644+ emitter . on ( 'finish-renaming-file ' , async ( value ) => {
645+ log ( 'finish-renaming-file ' , value )
646646
647647 // You can only rename one file, the selected one
648648 const file = state . selectedFiles [ 0 ]
@@ -776,6 +776,166 @@ async function store(state, emitter) {
776776 emitter . emit ( 'render' )
777777 } )
778778
779+ emitter . on ( 'rename-tab' , ( id ) => {
780+ log ( 'rename-tab' , id )
781+ state . renamingTab = id
782+ emitter . emit ( 'render' )
783+ } )
784+ emitter . on ( 'finish-renaming-tab' , async ( value ) => {
785+ log ( 'finish-renaming-tab' , value )
786+ let response = canSave ( {
787+ view : state . view ,
788+ isConnected : state . isConnected ,
789+ openFiles : state . openFiles ,
790+ editingFile : state . editingFile
791+ } )
792+ if ( response == false ) {
793+ log ( "can't save" )
794+ return
795+ }
796+
797+ state . isSaving = true
798+ emitter . emit ( 'render' )
799+
800+ // Rename the open file object
801+ let openFile = state . openFiles . find ( f => f . id === state . renamingTab )
802+ if ( value == openFile . fileName ) {
803+ state . renamingTab = null
804+ state . isSaving = false
805+ emitter . emit ( 'render' )
806+ return
807+ }
808+
809+ const oldName = openFile . fileName
810+ openFile . fileName = value
811+
812+ let willOverwrite = false
813+ if ( openFile . parentFolder === null ) { // it's a new file
814+ // Define parent folder
815+ if ( openFile . source == 'board' ) {
816+ openFile . parentFolder = state . boardNavigationPath
817+ // Check for overwrite
818+ willOverwrite = await serial . fileExists (
819+ serial . getFullPath (
820+ state . boardNavigationRoot ,
821+ openFile . parentFolder ,
822+ openFile . fileName
823+ )
824+ )
825+ } else if ( openFile . source == 'disk' ) {
826+ openFile . parentFolder = state . diskNavigationPath
827+ // Check for overwrite
828+ willOverwrite = await disk . fileExists (
829+ disk . getFullPath (
830+ state . diskNavigationRoot ,
831+ openFile . parentFolder ,
832+ openFile . fileName
833+ )
834+ )
835+ }
836+ } else if ( openFile . parentFolder !== null ) {
837+ if ( openFile . source == 'board' ) {
838+ // Check for overwrite
839+ willOverwrite = await serial . fileExists (
840+ serial . getFullPath (
841+ state . boardNavigationRoot ,
842+ openFile . parentFolder ,
843+ openFile . fileName
844+ )
845+ )
846+ } else if ( openFile . source == 'disk' ) {
847+ // Check for overwrite
848+ willOverwrite = await disk . fileExists (
849+ disk . getFullPath (
850+ state . diskNavigationRoot ,
851+ openFile . parentFolder ,
852+ openFile . fileName
853+ )
854+ )
855+ }
856+ }
857+
858+ // SAVE FILE CONTENTS
859+ const contents = openFile . editor . editor . state . doc . toString ( )
860+ try {
861+ if ( openFile . source == 'board' ) {
862+ await serial . get_prompt ( )
863+ await serial . saveFileContent (
864+ serial . getFullPath (
865+ state . boardNavigationRoot ,
866+ openFile . parentFolder ,
867+ oldName
868+ ) ,
869+ contents ,
870+ ( e ) => {
871+ state . savingProgress = e
872+ emitter . emit ( 'render' )
873+ }
874+ )
875+ } else if ( openFile . source == 'disk' ) {
876+ await disk . saveFileContent (
877+ disk . getFullPath (
878+ state . diskNavigationRoot ,
879+ openFile . parentFolder ,
880+ oldName
881+ ) ,
882+ contents
883+ )
884+ }
885+ } catch ( e ) {
886+ log ( 'error' , e )
887+ }
888+
889+ if ( willOverwrite ) {
890+ const confirmation = confirm ( `You are about to overwrite the file ${ openFile . fileName } on your ${ openFile . source } .\n\n Are you sure you want to proceed?` , 'Cancel' , 'Yes' )
891+ if ( ! confirmation ) {
892+ state . renamingTab = null
893+ state . isSaving = false
894+ openFile . fileName = oldName
895+ emitter . emit ( 'render' )
896+ return
897+ }
898+ }
899+
900+ try {
901+ if ( openFile . source == 'board' ) {
902+ await serial . renameFile (
903+ serial . getFullPath (
904+ state . boardNavigationRoot ,
905+ openFile . parentFolder ,
906+ oldName
907+ ) ,
908+ serial . getFullPath (
909+ state . boardNavigationRoot ,
910+ openFile . parentFolder ,
911+ openFile . fileName
912+ )
913+ )
914+ } else if ( openFile . source == 'disk' ) {
915+ await disk . renameFile (
916+ disk . getFullPath (
917+ state . diskNavigationRoot ,
918+ openFile . parentFolder ,
919+ oldName
920+ ) ,
921+ disk . getFullPath (
922+ state . diskNavigationRoot ,
923+ openFile . parentFolder ,
924+ openFile . fileName
925+ )
926+ )
927+ }
928+ } catch ( e ) {
929+ log ( 'error' , e )
930+ }
931+
932+ state . renamingTab = null
933+ state . isSaving = false
934+ state . savingProgress = 0
935+ emitter . emit ( 'refresh-files' )
936+ emitter . emit ( 'render' )
937+ } )
938+
779939 emitter . on ( 'toggle-file-selection' , ( file , source , event ) => {
780940 log ( 'toggle-file-selection' , file , source , event )
781941 // Single file selection unless holding keyboard key
0 commit comments