From 1192d6a44a1da431c59e7bfc9709423d4fc4d391 Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Mon, 6 Dec 2021 15:01:40 +0100 Subject: [PATCH] Automatically install 'Arduino_BuiltIn' library at first startup --- .../browser/arduino-frontend-contribution.tsx | 29 ++++++++++++++----- .../src/node/library-service-server-impl.ts | 18 ++++++------ 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 3cfc49fd8..369828217 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -7,6 +7,7 @@ import { SketchesService, ExecutableService, Sketch, + LibraryService, } from '../common/protocol'; import { Mutex } from 'async-mutex'; import { @@ -69,7 +70,7 @@ import { SketchesServiceClientImpl } from '../common/protocol/sketches-service-c import { SaveAsSketch } from './contributions/save-as-sketch'; import { SketchbookWidgetContribution } from './widgets/sketchbook/sketchbook-widget-contribution'; -const INIT_AVR_PACKAGES = 'initializedAvrPackages'; +const INIT_LIBS_AND_PACKAGES = 'initializedLibsAndPackages'; @injectable() export class ArduinoFrontendContribution @@ -89,6 +90,9 @@ export class ArduinoFrontendContribution @inject(BoardsService) protected readonly boardsService: BoardsService; + @inject(LibraryService) + protected readonly libraryService: LibraryService; + @inject(BoardsServiceProvider) protected readonly boardsServiceClientImpl: BoardsServiceProvider; @@ -161,15 +165,26 @@ export class ArduinoFrontendContribution @postConstruct() protected async init(): Promise { - const notFirstStartup = await this.localStorageService.getData( - INIT_AVR_PACKAGES - ); - if (!notFirstStartup) { - await this.localStorageService.setData(INIT_AVR_PACKAGES, true); + const isFirstStartup = !(await this.localStorageService.getData( + INIT_LIBS_AND_PACKAGES + )); + if (isFirstStartup) { + await this.localStorageService.setData(INIT_LIBS_AND_PACKAGES, true); const avrPackage = await this.boardsService.getBoardPackage({ id: 'arduino:avr', }); - avrPackage && (await this.boardsService.install({ item: avrPackage })); + const builtInLibrary = ( + await this.libraryService.search({ + query: 'Arduino_BuiltIn', + }) + )[0]; + + !!avrPackage && (await this.boardsService.install({ item: avrPackage })); + !!builtInLibrary && + (await this.libraryService.install({ + item: builtInLibrary, + installDependencies: true, + })); } if (!window.navigator.onLine) { // tslint:disable-next-line:max-line-length diff --git a/arduino-ide-extension/src/node/library-service-server-impl.ts b/arduino-ide-extension/src/node/library-service-server-impl.ts index 7d24dc834..1ff3acb73 100644 --- a/arduino-ide-extension/src/node/library-service-server-impl.ts +++ b/arduino-ide-extension/src/node/library-service-server-impl.ts @@ -30,7 +30,8 @@ import { InstallWithProgress } from './grpc-installable'; @injectable() export class LibraryServiceImpl extends CoreClientAware - implements LibraryService { + implements LibraryService +{ @inject(ILogger) protected logger: ILogger; @@ -267,9 +268,7 @@ export class LibraryServiceImpl req.setInstance(instance); req.setName(item.name); req.setVersion(version); - if (options.installDependencies === false) { - req.setNoDeps(true); - } + req.setNoDeps(!options.installDependencies); console.info('>>> Starting library package installation...', item); const resp = client.libraryInstall(req); @@ -282,13 +281,14 @@ export class LibraryServiceImpl ); await new Promise((resolve, reject) => { resp.on('end', () => { - this.boardDiscovery.startBoardListWatch(coreClient) + this.boardDiscovery.startBoardListWatch(coreClient); resolve(); }); resp.on('error', (error) => { this.responseService.appendToOutput({ - chunk: `Failed to install library: ${item.name}${version ? `:${version}` : '' - }.\n`, + chunk: `Failed to install library: ${item.name}${ + version ? `:${version}` : '' + }.\n`, }); this.responseService.appendToOutput({ chunk: error.toString(), @@ -332,7 +332,7 @@ export class LibraryServiceImpl ); await new Promise((resolve, reject) => { resp.on('end', () => { - this.boardDiscovery.startBoardListWatch(coreClient) + this.boardDiscovery.startBoardListWatch(coreClient); resolve(); }); resp.on('error', reject); @@ -364,7 +364,7 @@ export class LibraryServiceImpl ); await new Promise((resolve, reject) => { resp.on('end', () => { - this.boardDiscovery.startBoardListWatch(coreClient) + this.boardDiscovery.startBoardListWatch(coreClient); resolve(); }); resp.on('error', reject);