Skip to content

Commit 36b169a

Browse files
committed
Switch to tab if file is already open
1 parent 7a880a3 commit 36b169a

File tree

1 file changed

+67
-72
lines changed

1 file changed

+67
-72
lines changed

ui/arduino/store.js

Lines changed: 67 additions & 72 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy