mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-06-05 03:36:35 +00:00
Get the default sketchbook path from backend
Signed-off-by: jbicker <jan.bicker@typefox.io>
This commit is contained in:
parent
d809daa20a
commit
d5589c435f
@ -46,6 +46,7 @@ import { BoardsConfigDialog } from './boards/boards-config-dialog';
|
||||
import { BoardsToolBarItem } from './boards/boards-toolbar-item';
|
||||
import { BoardsConfig } from './boards/boards-config';
|
||||
import { MonitorService } from '../common/protocol/monitor-service';
|
||||
import { ConfigService } from '../common/protocol/config-service';
|
||||
|
||||
export namespace ArduinoMenus {
|
||||
export const SKETCH = [...MAIN_MENU_BAR, '3_sketch'];
|
||||
@ -140,6 +141,9 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
|
||||
@inject(WorkspaceService)
|
||||
protected readonly workspaceService: WorkspaceService;
|
||||
|
||||
@inject(ConfigService)
|
||||
protected readonly configService: ConfigService;
|
||||
|
||||
protected boardsToolbarItem: BoardsToolBarItem | null;
|
||||
protected wsSketchCount: number = 0;
|
||||
|
||||
@ -452,11 +456,9 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
|
||||
protected async getWorkspaceSketches(): Promise<Sketch[]> {
|
||||
|
||||
let sketches: Sketch[] = [];
|
||||
const userHome = await this.fileSystem.getCurrentUserHome();
|
||||
console.log('userHome', userHome);
|
||||
if (!!userHome) {
|
||||
// TODO: get this from the backend
|
||||
const result = new URI(userHome.uri).resolve('Arduino-PoC').resolve('Sketches').toString();
|
||||
const config = await this.configService.getConfiguration();
|
||||
const result = config.sketchDirPath;
|
||||
if (!!result) {
|
||||
const stat = await this.fileSystem.getFileStat(result);
|
||||
if (!!stat) {
|
||||
sketches = await this.sketches.getSketches(stat);
|
||||
|
@ -56,6 +56,7 @@ import { LibraryItemRenderer } from './library/library-item-renderer';
|
||||
import { BoardItemRenderer } from './boards/boards-item-renderer';
|
||||
import { MonitorServiceClientImpl } from './monitor/monitor-service-client-impl';
|
||||
import { MonitorServicePath, MonitorService, MonitorServiceClient } from '../common/protocol/monitor-service';
|
||||
import { ConfigService, ConfigServicePath } from '../common/protocol/config-service';
|
||||
const ElementQueries = require('css-element-queries/src/ElementQueries');
|
||||
|
||||
if (!ARDUINO_PRO_MODE) {
|
||||
@ -96,6 +97,9 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
|
||||
// Sketch list service
|
||||
bind(SketchesService).toDynamicValue(context => WebSocketConnectionProvider.createProxy(context.container, SketchesServicePath)).inSingletonScope();
|
||||
|
||||
// Config service
|
||||
bind(ConfigService).toDynamicValue(context => WebSocketConnectionProvider.createProxy(context.container, ConfigServicePath)).inSingletonScope();
|
||||
|
||||
// Boards service
|
||||
bind(BoardsService).toDynamicValue(context => {
|
||||
const connection = context.container.get(WebSocketConnectionProvider);
|
||||
|
@ -4,6 +4,7 @@ import { WorkspaceServer } from "@theia/workspace/lib/common";
|
||||
import { FileSystem, FileStat } from "@theia/filesystem/lib/common";
|
||||
import URI from "@theia/core/lib/common/uri";
|
||||
import { SketchFactory } from "./sketch-factory";
|
||||
import { ConfigService } from "../common/protocol/config-service";
|
||||
|
||||
/**
|
||||
* This is workaround to have custom frontend binding for the default workspace, although we
|
||||
@ -21,16 +22,14 @@ export class AWorkspaceService extends WorkspaceService {
|
||||
@inject(SketchFactory)
|
||||
protected readonly sketchFactory: SketchFactory;
|
||||
|
||||
@inject(ConfigService)
|
||||
protected readonly configService: ConfigService;
|
||||
|
||||
protected async getDefaultWorkspacePath(): Promise<string | undefined> {
|
||||
let result = await super.getDefaultWorkspacePath();
|
||||
if (!result) {
|
||||
const userHome = await this.fileSystem.getCurrentUserHome();
|
||||
if (!userHome) {
|
||||
return;
|
||||
}
|
||||
|
||||
// The backend has created this location if it was missing.
|
||||
result = new URI(userHome.uri).resolve('Arduino-PoC').resolve('Sketches').toString();
|
||||
const config = await this.configService.getConfiguration();
|
||||
result = config.sketchDirPath;
|
||||
}
|
||||
|
||||
const stat = await this.fileSystem.getFileStat(result);
|
||||
|
12
arduino-ide-extension/src/common/protocol/config-service.ts
Normal file
12
arduino-ide-extension/src/common/protocol/config-service.ts
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
export const ConfigServicePath = '/services/config-service';
|
||||
export const ConfigService = Symbol('ConfigService');
|
||||
|
||||
export interface ConfigService {
|
||||
getConfiguration(): Promise<Config>;
|
||||
}
|
||||
|
||||
export interface Config {
|
||||
sketchDirPath: string;
|
||||
dataDirPath: string;
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user