diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 9e83ccdd..ecdc465f 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -357,11 +357,10 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C async openSketchFiles(uri: string) { const fileStat = await this.fileSystem.getFileStat(uri); if (fileStat) { - const sketchFiles = await this.sketches.getSketchFiles(fileStat); - sketchFiles.forEach(sketchFile => { - const uri = new URI(sketchFile); - this.editorManager.open(uri); - }); + const uris = await this.sketches.getSketchFiles(fileStat); + for (const uri of uris) { + this.editorManager.open(new URI(uri)); + } } } diff --git a/arduino-ide-extension/src/electron-browser/electron-arduino-main-menu-factory.ts b/arduino-ide-extension/src/electron-browser/electron-arduino-main-menu-factory.ts deleted file mode 100644 index 0b971357..00000000 --- a/arduino-ide-extension/src/electron-browser/electron-arduino-main-menu-factory.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { injectable } from "inversify"; -import * as electron from 'electron'; -import { ElectronMainMenuFactory } from "@theia/core/lib/electron-browser/menu/electron-main-menu-factory"; -import { - isOSX -} from '@theia/core/lib/common'; - -@injectable() -export class ElectronArduinoMainMenuFactory extends ElectronMainMenuFactory { - createMenuBar(): Electron.Menu { - const menuModel = this.menuProvider.getMenu(); - const template = this.fillMenuTemplate([], menuModel); - if (isOSX) { - template.unshift(this.createOSXMenu()); - } - const menu = electron.remote.Menu.buildFromTemplate(template); - this._menu = menu; - return menu; - } -} \ No newline at end of file diff --git a/arduino-ide-extension/src/electron-browser/electron-arduino-menu-module.ts b/arduino-ide-extension/src/electron-browser/electron-arduino-menu-module.ts index a2d28f7b..57573c4f 100644 --- a/arduino-ide-extension/src/electron-browser/electron-arduino-menu-module.ts +++ b/arduino-ide-extension/src/electron-browser/electron-arduino-menu-module.ts @@ -1,13 +1,8 @@ import { ContainerModule } from "inversify"; -import { ElectronArduinoMainMenuFactory } from "./electron-arduino-main-menu-factory"; -import { ElectronMainMenuFactory } from "@theia/core/lib/electron-browser/menu/electron-main-menu-factory"; import { ElectronMenuContribution } from "@theia/core/lib/electron-browser/menu/electron-menu-contribution" import { ElectronArduinoMenuContribution } from "./electron-arduino-menu-contribution"; export default new ContainerModule((bind, unbind, isBound, rebind) => { - bind(ElectronArduinoMainMenuFactory).toSelf().inSingletonScope(); - rebind(ElectronMainMenuFactory).to(ElectronArduinoMainMenuFactory); - bind(ElectronArduinoMenuContribution).toSelf().inSingletonScope(); rebind(ElectronMenuContribution).to(ElectronArduinoMenuContribution); }) \ No newline at end of file diff --git a/arduino-ide-extension/src/node/sketches-service-impl.ts b/arduino-ide-extension/src/node/sketches-service-impl.ts index bd812b0f..2107ec0d 100644 --- a/arduino-ide-extension/src/node/sketches-service-impl.ts +++ b/arduino-ide-extension/src/node/sketches-service-impl.ts @@ -4,6 +4,7 @@ import URI from "@theia/core/lib/common/uri"; import { FileStat, FileSystem } from "@theia/filesystem/lib/common"; import * as fs from 'fs'; import * as path from 'path'; +import { FileUri } from "@theia/core/lib/node"; export const ALLOWED_FILE_EXTENSIONS = [".c", ".cpp", ".h", ".hh", ".hpp", ".s", ".pde", ".ino"]; @@ -17,17 +18,19 @@ export class SketchesServiceImpl implements SketchesService { const sketches: Sketch[] = []; if (fileStat && fileStat.isDirectory) { const uri = new URI(fileStat.uri); - const sketchFolderPath = uri.path.toString() - const files = fs.readdirSync(sketchFolderPath); - files.forEach(file => { - const filePath = path.join(sketchFolderPath, file); - if (this.isSketchFolder(filePath, file)) { - sketches.push({ - name: file, - uri: filePath - }); + const sketchFolderPath = await this.filesystem.getFsPath(uri.toString()); + if (sketchFolderPath) { + const fileNames = fs.readdirSync(sketchFolderPath); + for (const fileName of fileNames) { + const filePath = path.join(sketchFolderPath, fileName); + if (this.isSketchFolder(filePath, fileName)) { + sketches.push({ + name: fileName, + uri: FileUri.create(filePath).toString() + }); + } } - }); + } } return sketches; } @@ -37,30 +40,32 @@ export class SketchesServiceImpl implements SketchesService { * File extensions: "c", "cpp", "h", "hh", "hpp", "s", "pde", "ino" */ async getSketchFiles(sketchFileStat: FileStat): Promise { - const files: string[] = []; + const uris: string[] = []; const sketchUri = new URI(sketchFileStat.uri); - const sketchPath = sketchUri.path.toString(); - if (sketchFileStat.isDirectory && this.isSketchFolder(sketchPath, sketchUri.displayName)) { - const sketchDirContents = fs.readdirSync(sketchPath); - sketchDirContents.forEach(fileName => { - const filePath = path.join(sketchPath, fileName); - if (fs.existsSync(filePath) && - fs.lstatSync(filePath).isFile() && - ALLOWED_FILE_EXTENSIONS.indexOf(path.extname(filePath)) !== -1) { - files.push(filePath); + const sketchPath = await this.filesystem.getFsPath(sketchUri.toString()); + if (sketchPath) { + if (sketchFileStat.isDirectory && this.isSketchFolder(sketchPath, sketchUri.displayName)) { + const fileNames = fs.readdirSync(sketchPath); + for (const fileName of fileNames) { + const filePath = path.join(sketchPath, fileName); + if (ALLOWED_FILE_EXTENSIONS.indexOf(path.extname(filePath)) !== -1 + && fs.existsSync(filePath) + && fs.lstatSync(filePath).isFile()) { + uris.push(FileUri.create(filePath).toString()) + } } - }); - } else { - const sketchDir = sketchUri.path.dir; - if (this.isSketchFolder(sketchDir.toString(), sketchDir.name)) { - const sketchFolderStat = await this.filesystem.getFileStat(sketchDir.toString()); - if (sketchFolderStat) { - const sketchDirContents = await this.getSketchFiles(sketchFolderStat); - files.push(...sketchDirContents); + } else { + const sketchDir = path.dirname(sketchPath); + if (sketchDir && this.isSketchFolder(sketchDir, sketchUri.path.dir.name)) { + const sketchFolderStat = await this.filesystem.getFileStat(sketchUri.path.dir.toString()); + if (sketchFolderStat) { + const sketchDirContents = await this.getSketchFiles(sketchFolderStat); + uris.push(...sketchDirContents); + } } } } - return files; + return uris; } protected isSketchFolder(path: string, name: string): boolean {