diff --git a/arduino-ide-extension/src/node/config-service-impl.ts b/arduino-ide-extension/src/node/config-service-impl.ts index 12b5a633..5f16d264 100644 --- a/arduino-ide-extension/src/node/config-service-impl.ts +++ b/arduino-ide-extension/src/node/config-service-impl.ts @@ -1,5 +1,8 @@ -import { injectable, inject } from 'inversify'; +import { mkdirpSync, existsSync } from 'fs-extra'; +import { injectable, inject, postConstruct } from 'inversify'; import URI from '@theia/core/lib/common/uri'; +import { FileUri } from '@theia/core/lib/node/file-uri'; +import { Deferred } from '@theia/core/lib/common/promise-util'; import { ConfigService, Config } from '../common/protocol/config-service'; import { ArduinoCli } from './arduino-cli'; @@ -8,9 +11,24 @@ export class ConfigServiceImpl implements ConfigService { @inject(ArduinoCli) protected readonly cli: ArduinoCli; + protected readonly config: Deferred = new Deferred(); + + @postConstruct() + protected init(): void { + this.cli.getDefaultConfig().then(config => { + const { dataDirUri, sketchDirUri } = config; + for (const uri of [dataDirUri, sketchDirUri]) { + const path = FileUri.fsPath(uri); + if (!existsSync(path)) { + mkdirpSync(path); + } + } + this.config.resolve(config); + }); + } async getConfiguration(): Promise { - return this.cli.getDefaultConfig(); + return this.config.promise; } async getVersion(): Promise {