1
- import { injectable , inject } from 'inversify' ;
1
+ import { mkdirpSync , existsSync } from 'fs-extra' ;
2
+ import { injectable , inject , postConstruct } from 'inversify' ;
2
3
import URI from '@theia/core/lib/common/uri' ;
4
+ import { FileUri } from '@theia/core/lib/node/file-uri' ;
5
+ import { Deferred } from '@theia/core/lib/common/promise-util' ;
3
6
import { ConfigService , Config } from '../common/protocol/config-service' ;
4
7
import { ArduinoCli } from './arduino-cli' ;
5
8
@@ -8,9 +11,24 @@ export class ConfigServiceImpl implements ConfigService {
8
11
9
12
@inject ( ArduinoCli )
10
13
protected readonly cli : ArduinoCli ;
14
+ protected readonly config : Deferred < Config > = new Deferred ( ) ;
15
+
16
+ @postConstruct ( )
17
+ protected init ( ) : void {
18
+ this . cli . getDefaultConfig ( ) . then ( config => {
19
+ const { dataDirUri, sketchDirUri } = config ;
20
+ for ( const uri of [ dataDirUri , sketchDirUri ] ) {
21
+ const path = FileUri . fsPath ( uri ) ;
22
+ if ( ! existsSync ( path ) ) {
23
+ mkdirpSync ( path ) ;
24
+ }
25
+ }
26
+ this . config . resolve ( config ) ;
27
+ } ) ;
28
+ }
11
29
12
30
async getConfiguration ( ) : Promise < Config > {
13
- return this . cli . getDefaultConfig ( ) ;
31
+ return this . config . promise ;
14
32
}
15
33
16
34
async getVersion ( ) : Promise < string > {
0 commit comments