Get the default sketchbook path from backend

Signed-off-by: jbicker <jan.bicker@typefox.io>
This commit is contained in:
jbicker
2019-08-26 15:59:18 +02:00
parent d809daa20a
commit d5589c435f
8 changed files with 65 additions and 27 deletions

View File

@@ -19,12 +19,14 @@ import { DefaultWorkspaceServerExt } from './default-workspace-server-ext';
import { WorkspaceServer } from '@theia/workspace/lib/common';
import { SketchesServiceImpl } from './sketches-service-impl';
import { SketchesService, SketchesServicePath } from '../common/protocol/sketches-service';
import { ConfigService, ConfigServicePath } from '../common/protocol/config-service';
import { MonitorServiceImpl } from './monitor/monitor-service-impl';
import { MonitorService, MonitorServicePath, MonitorServiceClient } from '../common/protocol/monitor-service';
import { MonitorClientProvider } from './monitor/monitor-client-provider';
import { ArduinoCli } from './arduino-cli';
import { ArduinoCliContribution } from './arduino-cli-contribution';
import { CliContribution } from '@theia/core/lib/node';
import { ConfigServiceImpl } from './config-service-impl';
export default new ContainerModule((bind, unbind, isBound, rebind) => {
// Theia backend CLI contribution.
@@ -53,6 +55,15 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
bindBackendService(SketchesServicePath, SketchesService);
});
bind(ConnectionContainerModule).toConstantValue(sketchesServiceConnectionModule);
bind(ConfigServiceImpl).toSelf().inSingletonScope();
bind(ConfigService).toService(ConfigServiceImpl);
// Config service
const configServiceConnectionModule = ConnectionContainerModule.create(({ bind, bindBackendService }) => {
bindBackendService(ConfigServicePath, ConfigService);
});
bind(ConnectionContainerModule).toConstantValue(configServiceConnectionModule);
// Boards service
const boardsServiceConnectionModule = ConnectionContainerModule.create(({ bind, bindBackendService }) => {

View File

@@ -3,6 +3,7 @@ import * as which from 'which';
import * as cp from 'child_process';
import { join, delimiter } from 'path';
import { injectable } from 'inversify';
import { Config } from '../common/protocol/config-service';
@injectable()
export class ArduinoCli {
@@ -20,9 +21,9 @@ export class ArduinoCli {
});
}
async getDefaultConfig(): Promise<ArduinoCli.Config> {
async getDefaultConfig(): Promise<Config> {
const command = await this.getExecPath();
return new Promise<ArduinoCli.Config>((resolve, reject) => {
return new Promise<Config>((resolve, reject) => {
cp.execFile(
command,
['config', 'dump', '--format', 'json'],
@@ -41,7 +42,7 @@ export class ArduinoCli {
// https://github.com/arduino/arduino-cli/issues/342
// XXX: this is a hack. The CLI provides a non-valid JSON.
const config: Partial<ArduinoCli.Config> = {};
const config: Partial<Config> = {};
const raw = stdout.trim();
for (const line of raw.split(/\r?\n/) || []) {
// TODO: Named capture groups are avail from ES2018.
@@ -69,11 +70,4 @@ export class ArduinoCli {
});
}
}
export namespace ArduinoCli {
export interface Config {
sketchDirPath: string;
dataDirPath: string;
}
}
}

View File

@@ -0,0 +1,14 @@
import { injectable, inject } from "inversify";
import { ConfigService, Config } from "../common/protocol/config-service";
import { ArduinoCli } from "./arduino-cli";
@injectable()
export class ConfigServiceImpl implements ConfigService {
@inject(ArduinoCli)
protected readonly cli: ArduinoCli;
async getConfiguration(): Promise<Config> {
return this.cli.getDefaultConfig();
}
}

View File

@@ -1,14 +1,16 @@
import * as os from 'os';
import * as path from 'path';
import { injectable } from 'inversify';
import { injectable, inject } from 'inversify';
import { FileUri } from '@theia/core/lib/node/file-uri';
import { DefaultWorkspaceServer } from '@theia/workspace/lib/node/default-workspace-server';
import { ConfigService } from '../common/protocol/config-service';
@injectable()
export class DefaultWorkspaceServerExt extends DefaultWorkspaceServer {
@inject(ConfigService) protected readonly configService: ConfigService;
protected async getWorkspaceURIFromCli(): Promise<string | undefined> {
return FileUri.create(path.join(os.homedir(), 'Arduino-PoC', 'Sketches')).toString();
const config = await this.configService.getConfiguration();
return FileUri.create(config.sketchDirPath).toString();
}
}