@@ -1021,17 +1021,19 @@ async function store(state, emitter) {
1021
1021
1022
1022
emitter . on ( 'toggle-file-selection' , ( file , source , event ) => {
1023
1023
log ( 'toggle-file-selection' , file , source , event )
1024
+ let parentFolder = source == 'board' ? state . boardNavigationPath : state . diskNavigationPath
1024
1025
// Single file selection unless holding keyboard key
1025
1026
if ( event && ! event . ctrlKey && ! event . metaKey ) {
1026
1027
state . selectedFiles = [ {
1027
1028
fileName : file . fileName ,
1028
1029
type : file . type ,
1029
1030
source : source ,
1030
- parentFolder : file . parentFolder
1031
+ parentFolder : parentFolder
1031
1032
} ]
1032
1033
emitter . emit ( 'render' )
1033
1034
return
1034
1035
}
1036
+
1035
1037
const isSelected = state . selectedFiles . find ( ( f ) => {
1036
1038
return f . fileName === file . fileName && f . source === source
1037
1039
} )
@@ -1044,80 +1046,90 @@ async function store(state, emitter) {
1044
1046
fileName : file . fileName ,
1045
1047
type : file . type ,
1046
1048
source : source ,
1047
- parentFolder : file . parentFolder
1049
+ parentFolder : parentFolder
1048
1050
} )
1049
1051
}
1050
1052
emitter . emit ( 'render' )
1051
1053
} )
1052
1054
emitter . on ( 'open-selected-files' , async ( ) => {
1053
1055
log ( 'open-selected-files' )
1054
- let files = [ ]
1056
+ let filesToOpen = [ ]
1057
+ let filesAlreadyOpen = [ ]
1055
1058
for ( let i in state . selectedFiles ) {
1056
1059
let selectedFile = state . selectedFiles [ i ]
1057
- let openFile = null
1058
1060
if ( selectedFile . type == 'folder' ) {
1059
1061
// Don't open folders
1060
1062
continue
1061
1063
}
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
+ )
1068
1084
)
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
+ )
1086
1102
)
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
+ }
1097
1113
}
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 )
1098
1119
}
1099
- files . push ( openFile )
1100
1120
}
1101
1121
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
1119
1129
}
1120
1130
1131
+ state . openFiles = state . openFiles . concat ( filesToOpen )
1132
+
1121
1133
state . view = 'editor'
1122
1134
emitter . emit ( 'render' )
1123
1135
} )
@@ -1476,23 +1488,6 @@ function canEdit({ selectedFiles }) {
1476
1488
return files . length != 0
1477
1489
}
1478
1490
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
-
1496
1491
async function removeBoardFolder ( fullPath ) {
1497
1492
// TODO: Replace with getting the file tree from the board and deleting one by one
1498
1493
let output = await serial . execFile ( './ui/arduino/helpers.py' )
0 commit comments