mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-11-23 09:06:10 +00:00
Get the default sketchbook path from backend
Signed-off-by: jbicker <jan.bicker@typefox.io>
This commit is contained in:
@@ -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 }) => {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
arduino-ide-extension/src/node/config-service-impl.ts
Normal file
14
arduino-ide-extension/src/node/config-service-impl.ts
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user