@@ -1021,17 +1021,19 @@ async function store(state, emitter) {
10211021
10221022 emitter . on ( 'toggle-file-selection' , ( file , source , event ) => {
10231023 log ( 'toggle-file-selection' , file , source , event )
1024+ let parentFolder = source == 'board' ? state . boardNavigationPath : state . diskNavigationPath
10241025 // Single file selection unless holding keyboard key
10251026 if ( event && ! event . ctrlKey && ! event . metaKey ) {
10261027 state . selectedFiles = [ {
10271028 fileName : file . fileName ,
10281029 type : file . type ,
10291030 source : source ,
1030- parentFolder : file . parentFolder
1031+ parentFolder : parentFolder
10311032 } ]
10321033 emitter . emit ( 'render' )
10331034 return
10341035 }
1036+
10351037 const isSelected = state . selectedFiles . find ( ( f ) => {
10361038 return f . fileName === file . fileName && f . source === source
10371039 } )
@@ -1044,80 +1046,90 @@ async function store(state, emitter) {
10441046 fileName : file . fileName ,
10451047 type : file . type ,
10461048 source : source ,
1047- parentFolder : file . parentFolder
1049+ parentFolder : parentFolder
10481050 } )
10491051 }
10501052 emitter . emit ( 'render' )
10511053 } )
10521054 emitter . on ( 'open-selected-files' , async ( ) => {
10531055 log ( 'open-selected-files' )
1054- let files = [ ]
1056+ let filesToOpen = [ ]
1057+ let filesAlreadyOpen = [ ]
10551058 for ( let i in state . selectedFiles ) {
10561059 let selectedFile = state . selectedFiles [ i ]
1057- let openFile = null
10581060 if ( selectedFile . type == 'folder' ) {
10591061 // Don't open folders
10601062 continue
10611063 }
1062- if ( selectedFile . source == 'board' ) {
1063- const fileContent = await serial . loadFile (
1064- serial . getFullPath (
1065- '/' ,
1066- state . boardNavigationPath ,
1067- selectedFile . fileName
1064+ // ALl good until here
1065+
1066+ const alreadyOpen = state . openFiles . find ( ( f ) => {
1067+ return f . fileName == selectedFile . fileName
1068+ && f . source == selectedFile . source
1069+ && f . parentFolder == selectedFile . parentFolder
1070+ } )
1071+ console . log ( 'already open' , alreadyOpen )
1072+
1073+ if ( ! alreadyOpen ) {
1074+ // This file is not open yet,
1075+ // load content and append it to the list of files to open
1076+ let file = null
1077+ if ( selectedFile . source == 'board' ) {
1078+ const fileContent = await serial . loadFile (
1079+ serial . getFullPath (
1080+ state . boardNavigationRoot ,
1081+ state . boardNavigationPath ,
1082+ selectedFile . fileName
1083+ )
10681084 )
1069- )
1070- openFile = createFile ( {
1071- parentFolder : state . boardNavigationPath ,
1072- fileName : selectedFile . fileName ,
1073- source : selectedFile . source ,
1074- content : fileContent
1075- } )
1076- openFile . editor . onChange = function ( ) {
1077- openFile . hasChanges = true
1078- emitter . emit ( 'render' )
1079- }
1080- } else if ( selectedFile . source == 'disk' ) {
1081- const fileContent = await disk . loadFile (
1082- disk . getFullPath (
1083- state . diskNavigationRoot ,
1084- state . diskNavigationPath ,
1085- selectedFile . fileName
1085+ file = createFile ( {
1086+ parentFolder : state . boardNavigationPath ,
1087+ fileName : selectedFile . fileName ,
1088+ source : selectedFile . source ,
1089+ content : fileContent
1090+ } )
1091+ file . editor . onChange = function ( ) {
1092+ file . hasChanges = true
1093+ emitter . emit ( 'render' )
1094+ }
1095+ } else if ( selectedFile . source == 'disk' ) {
1096+ const fileContent = await disk . loadFile (
1097+ disk . getFullPath (
1098+ state . diskNavigationRoot ,
1099+ state . diskNavigationPath ,
1100+ selectedFile . fileName
1101+ )
10861102 )
1087- )
1088- openFile = createFile ( {
1089- parentFolder : state . diskNavigationPath ,
1090- fileName : selectedFile . fileName ,
1091- source : selectedFile . source ,
1092- content : fileContent
1093- } )
1094- openFile . editor . onChange = function ( ) {
1095- openFile . hasChanges = true
1096- emitter . emit ( 'render' )
1103+ file = createFile ( {
1104+ parentFolder : state . diskNavigationPath ,
1105+ fileName : selectedFile . fileName ,
1106+ source : selectedFile . source ,
1107+ content : fileContent
1108+ } )
1109+ file . editor . onChange = function ( ) {
1110+ file . hasChanges = true
1111+ emitter . emit ( 'render' )
1112+ }
10971113 }
1114+ filesToOpen . push ( file )
1115+ } else {
1116+ // This file is already open,
1117+ // append it to the list of files that are already open
1118+ filesAlreadyOpen . push ( alreadyOpen )
10981119 }
1099- files . push ( openFile )
11001120 }
11011121
1102- files = files . filter ( ( f ) => { // find files to open
1103- let isAlready = false
1104- state . openFiles . forEach ( ( g ) => { // check if file is already open
1105- if (
1106- g . fileName == f . fileName
1107- && g . source == f . source
1108- && g . parentFolder == f . parentFolder
1109- ) {
1110- isAlready = true
1111- }
1112- } )
1113- return ! isAlready
1114- } )
1115-
1116- if ( files . length > 0 ) {
1117- state . openFiles = state . openFiles . concat ( files )
1118- state . editingFile = files [ 0 ] . id
1122+ // If opening an already open file, switch to its tab
1123+ if ( filesAlreadyOpen . length > 0 ) {
1124+ state . editingFile = filesAlreadyOpen [ 0 ] . id
1125+ }
1126+ // If there are new files to open, they take priority
1127+ if ( filesToOpen . length > 0 ) {
1128+ state . editingFile = filesToOpen [ 0 ] . id
11191129 }
11201130
1131+ state . openFiles = state . openFiles . concat ( filesToOpen )
1132+
11211133 state . view = 'editor'
11221134 emitter . emit ( 'render' )
11231135 } )
@@ -1476,23 +1488,6 @@ function canEdit({ selectedFiles }) {
14761488 return files . length != 0
14771489}
14781490
1479- function toggleFileSelection ( { fileName, source, selectedFiles } ) {
1480- let result = [ ]
1481- let file = selectedFiles . find ( ( f ) => {
1482- return f . fileName === fileName && f . source === source
1483- } )
1484- if ( file ) {
1485- // filter file out
1486- result = selectedFiles . filter ( ( f ) => {
1487- return f . fileName !== fileName && f . source !== source
1488- } )
1489- } else {
1490- // push file
1491- selectedFiles . push ( { fileName, source } )
1492- }
1493- return result
1494- }
1495-
14961491async function removeBoardFolder ( fullPath ) {
14971492 // TODO: Replace with getting the file tree from the board and deleting one by one
14981493 let output = await serial . execFile ( './ui/arduino/helpers.py' )
0 commit comments