Skip to content

Commit f881ce4

Browse files
fixup! feat: use Arduino CLI 1.0.0
1 parent aca5ece commit f881ce4

File tree

1 file changed

+23
-29
lines changed

1 file changed

+23
-29
lines changed

arduino-ide-extension/src/node/config-service-impl.ts

+23-29
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
} from '../common/protocol';
1717
import { spawnCommand } from './exec-util';
1818
import { ArduinoDaemonImpl } from './arduino-daemon-impl';
19-
import { DefaultCliConfig, CLI_CONFIG } from './cli-config';
19+
import { DefaultCliConfig, CLI_CONFIG, CliConfig } from './cli-config';
2020
import { Deferred } from '@theia/core/lib/common/promise-util';
2121
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
2222
import { deepClone, nls } from '@theia/core';
@@ -180,17 +180,13 @@ export class ConfigServiceImpl
180180
const content = await fs.readFile(cliConfigPath, {
181181
encoding: 'utf8',
182182
});
183-
const model = (yaml.safeLoad(content) || {}) as DefaultCliConfig;
183+
const model = (yaml.safeLoad(content) || {}) as CliConfig;
184184
this.logger.info(`Loaded CLI configuration: ${JSON.stringify(model)}`);
185-
if (
186-
model.directories &&
187-
model.directories.data &&
188-
model.directories.user
189-
) {
185+
if (model.directories?.data && model.directories?.user) {
190186
this.logger.info(
191187
"'directories.data' and 'directories.user' are set in the CLI configuration model."
192188
);
193-
return model;
189+
return model as DefaultCliConfig;
194190
}
195191
// The CLI can run with partial (missing `port`, `directories`), the IDE2 cannot.
196192
// We merge the default CLI config with the partial user's config.
@@ -221,17 +217,14 @@ export class ConfigServiceImpl
221217

222218
private async getFallbackCliConfig(): Promise<DefaultCliConfig> {
223219
const cliPath = this.daemon.getExecPath();
224-
const rawJson = await spawnCommand(cliPath, ['config', 'dump', '--json']);
225-
const config = JSON.parse(rawJson);
226-
227-
// Since CLI 1.0, the command `config dump` only returns user-modified values and not default ones.
228-
// directories.user and directories.data are required by IDE2 so we get the default value explicitly.
229-
const directoriesRaw = await spawnCommand(cliPath, [
230-
'config',
231-
'get',
232-
'directories',
233-
'--json',
220+
const [configRaw, directoriesRaw] = await Promise.all([
221+
spawnCommand(cliPath, ['config', 'dump', '--json']),
222+
// Since CLI 1.0, the command `config dump` only returns user-modified values and not default ones.
223+
// directories.user and directories.data are required by IDE2 so we get the default value explicitly.
224+
spawnCommand(cliPath, ['config', 'get', 'directories', '--json']),
234225
]);
226+
227+
const config = JSON.parse(configRaw);
235228
const { user, data } = JSON.parse(directoriesRaw);
236229

237230
return { ...config.config, directories: { user, data } };
@@ -317,25 +310,26 @@ export class ConfigServiceImpl
317310
config.board_manager?.additional_urls || [],
318311
};
319312

313+
const client = createArduinoCoreServiceClient({ port });
314+
320315
for (const [key, value] of Object.entries(updatableConfig)) {
321-
const client = createArduinoCoreServiceClient({ port });
322316
const req = new SettingsSetValueRequest();
323317
req.setKey(key);
324318
req.setEncodedValue(JSON.stringify(value));
325-
await new Promise<void>((resolve, reject) => {
319+
await new Promise<void>((resolve) => {
326320
client.settingsSetValue(req, (error) => {
327-
try {
328-
if (error) {
329-
reject(error);
330-
return;
331-
}
332-
resolve();
333-
} finally {
334-
client.close();
321+
if (error) {
322+
this.logger.error(
323+
`Could not update config with key: ${key} and value: ${value}`,
324+
error
325+
);
335326
}
327+
resolve();
336328
});
337329
});
338330
}
331+
332+
client.close();
339333
}
340334

341335
private async writeDaemonState(port: number): Promise<void> {
@@ -359,7 +353,7 @@ export class ConfigServiceImpl
359353

360354
const cliConfigUri = await this.getCliConfigFileUri();
361355
const cliConfigPath = FileUri.fsPath(cliConfigUri);
362-
fs.writeFile(cliConfigPath, configRaw, { encoding: 'utf-8' });
356+
await fs.writeFile(cliConfigPath, configRaw, { encoding: 'utf-8' });
363357
}
364358

365359
// #1445

0 commit comments

Comments
 (0)