Fixed the FS path issue on Windows.

Signed-off-by: Akos Kitta <kittaakos@typefox.io>
This commit is contained in:
Akos Kitta 2019-08-27 18:27:12 +02:00
parent 41c603937c
commit 9ae721292d
6 changed files with 35 additions and 24 deletions

View File

@ -457,12 +457,9 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
let sketches: Sketch[] = [];
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);
}
const stat = await this.fileSystem.getFileStat(config.sketchDirUri);
if (!!stat) {
sketches = await this.sketches.getSketches(stat);
}
return sketches;
}

View File

@ -29,7 +29,7 @@ export class AWorkspaceService extends WorkspaceService {
let result = await super.getDefaultWorkspacePath();
if (!result) {
const config = await this.configService.getConfiguration();
result = config.sketchDirPath;
result = config.sketchDirUri;
}
const stat = await this.fileSystem.getFileStat(result);

View File

@ -1,4 +1,3 @@
export const ConfigServicePath = '/services/config-service';
export const ConfigService = Symbol('ConfigService');
@ -7,6 +6,6 @@ export interface ConfigService {
}
export interface Config {
sketchDirPath: string;
dataDirPath: string;
}
sketchDirUri: string;
dataDirUri: string;
}

View File

@ -2,12 +2,17 @@ import * as os from 'os';
import * as which from 'which';
import * as cp from 'child_process';
import { join, delimiter } from 'path';
import { injectable } from 'inversify';
import { injectable, inject } from 'inversify';
import { ILogger } from '@theia/core';
import { FileUri } from '@theia/core/lib/node/file-uri';
import { Config } from '../common/protocol/config-service';
@injectable()
export class ArduinoCli {
@inject(ILogger)
protected logger: ILogger;
async getExecPath(): Promise<string> {
const build = join(__dirname, '..', '..', 'build');
return new Promise<string>((resolve, reject) => {
@ -47,25 +52,33 @@ export class ArduinoCli {
for (const line of raw.split(/\r?\n/) || []) {
// TODO: Named capture groups are avail from ES2018.
// const pair = line.match(/(?<key>[^:]+):(?<value>[^,]+),?/);
const pair = line.split(':').map(entry => entry.trim());
if (pair[0] === 'sketchbook_path') {
config.sketchDirPath = pair[1];
} else if (pair[0] === 'arduino_data') {
config.dataDirPath = pair[1];
const index = line.indexOf(':');
if (index !== -1) {
const key = line.substr(0, index).trim();
const value = line.substr(index + 1, line.length).trim();
if (!!key && !!value) {
if (key === 'sketchbook_path') {
config.sketchDirUri = FileUri.create(value).toString();
} else if (key === 'arduino_data') {
config.dataDirUri = FileUri.create(value).toString();
}
}
}
}
if (!config.dataDirPath) {
if (!config.dataDirUri) {
reject(new Error(`Could not parse config. 'arduino_data' was missing from: ${stdout}`));
return;
}
if (!config.sketchDirPath) {
if (!config.sketchDirUri) {
reject(new Error(`Could not parse config. 'sketchbook_path' was missing from: ${stdout}`));
return;
}
resolve({ sketchDirPath: config.sketchDirPath, dataDirPath: config.dataDirPath });
this.logger.info(`Retrieved the default configuration from the CLI: ${JSON.stringify(config)}`);
resolve({ sketchDirUri: config.sketchDirUri, dataDirUri: config.dataDirUri });
});
});
}

View File

@ -20,6 +20,7 @@ import {
import { ArduinoCli } from './arduino-cli';
import { Instance } from './cli-protocol/commands/common_pb';
import { CoreClientProvider, Client } from './core-client-provider';
import { FileUri } from '@theia/core/lib/node';
@injectable()
export class CoreClientProviderImpl implements CoreClientProvider {
@ -79,7 +80,9 @@ export class CoreClientProviderImpl implements CoreClientProvider {
throw new Error(`Could not resolve filesystem path of URI: ${rootUri}.`);
}
const { dataDirPath, sketchDirPath } = await this.cli.getDefaultConfig();
const { dataDirUri, sketchDirUri } = await this.cli.getDefaultConfig();
const dataDirPath = FileUri.fsPath(dataDirUri);
const sketchDirPath = FileUri.fsPath(sketchDirUri);
if (!fs.existsSync(dataDirPath)) {
fs.mkdirSync(dataDirPath);
@ -90,7 +93,7 @@ export class CoreClientProviderImpl implements CoreClientProvider {
}
const downloadDir = path.join(dataDirPath, 'staging');
if (fs.existsSync(downloadDir)) {
if (!fs.existsSync(downloadDir)) {
fs.mkdirSync(downloadDir);
}

View File

@ -1,5 +1,4 @@
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';
@ -10,7 +9,7 @@ export class DefaultWorkspaceServerExt extends DefaultWorkspaceServer {
protected async getWorkspaceURIFromCli(): Promise<string | undefined> {
const config = await this.configService.getConfiguration();
return FileUri.create(config.sketchDirPath).toString();
return config.sketchDirUri;
}
}