Skip to content

Commit d16a173

Browse files
authored
Merge pull request #119 from arduino/bugfix/open-file
Switch to tab if file is already open
2 parents 7a880a3 + 36b169a commit d16a173

File tree

1 file changed

+67
-72
lines changed

1 file changed

+67
-72
lines changed

ui/arduino/store.js

+67-72
Original file line numberDiff line numberDiff line change
@@ -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-
14961491
async 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

Comments
 (0)