Skip to content

Commit 0427759

Browse files
author
Alberto Iannaccone
committed
refactor monitor settings interfaces
1 parent 80ade4c commit 0427759

10 files changed

+70
-44
lines changed

arduino-ide-extension/src/browser/monitor-manager-proxy-client-impl.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import {
66
MonitorManagerProxyClient,
77
MonitorManagerProxyFactory,
88
} from '../common/protocol/monitor-service';
9-
import { MonitorSettings } from '../node/monitor-settings/monitor-settings-provider';
9+
import {
10+
PluggableMonitorSettings,
11+
MonitorSettings,
12+
} from '../node/monitor-settings/monitor-settings-provider';
1013

1114
@injectable()
1215
export class MonitorManagerProxyClientImpl
@@ -85,7 +88,7 @@ export class MonitorManagerProxyClientImpl
8588
async startMonitor(
8689
board: Board,
8790
port: Port,
88-
settings?: MonitorSettings
91+
settings?: PluggableMonitorSettings
8992
): Promise<void> {
9093
return this.server().startMonitor(board, port, settings);
9194
}
@@ -116,6 +119,7 @@ export class MonitorManagerProxyClientImpl
116119
JSON.stringify({
117120
command: Monitor.Command.CHANGE_SETTINGS,
118121
// TODO: This might be wrong, verify if it works
122+
// SPOILER: It doesn't
119123
data: settings,
120124
})
121125
);

arduino-ide-extension/src/browser/monitor-model.ts

+1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ export class MonitorModel implements FrontendApplicationContribution {
118118
}
119119
}
120120

121+
// TODO: Move this to /common
121122
export namespace MonitorModel {
122123
export interface State {
123124
autoscroll: boolean;

arduino-ide-extension/src/browser/serial/monitor/monitor-widget.tsx

+14-9
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,22 @@ export class MonitorWidget extends ReactWidget {
182182
// This breaks if the user tries to open a monitor that
183183
// doesn't support the baudrate setting.
184184
protected get baudRates(): string[] {
185-
const settings = this.getCurrentSettings();
186-
const baudRateSettings = settings['baudrate'];
187-
if (!baudRateSettings) {
185+
const { pluggableMonitorSettings } = this.getCurrentSettings();
186+
if (!pluggableMonitorSettings || !pluggableMonitorSettings['baudrate']) {
188187
return [];
189188
}
189+
190+
const baudRateSettings = pluggableMonitorSettings['baudrate'];
191+
190192
return baudRateSettings.values;
191193
}
192194

193195
protected get selectedBaudRate(): string {
194-
const settings = this.getCurrentSettings();
195-
const baudRateSettings = settings['baudrate'];
196-
if (!baudRateSettings) {
196+
const { pluggableMonitorSettings } = this.getCurrentSettings();
197+
if (!pluggableMonitorSettings || !pluggableMonitorSettings['baudrate']) {
197198
return '';
198199
}
200+
const baudRateSettings = pluggableMonitorSettings['baudrate'];
199201
return baudRateSettings.selectedValue;
200202
}
201203

@@ -260,8 +262,11 @@ export class MonitorWidget extends ReactWidget {
260262
};
261263

262264
protected readonly onChangeBaudRate = (value: string) => {
263-
const settings = this.getCurrentSettings();
264-
settings['baudrate'].selectedValue = value;
265-
this.monitorManagerProxy.changeSettings(settings);
265+
const { pluggableMonitorSettings } = this.getCurrentSettings();
266+
if (!pluggableMonitorSettings || !pluggableMonitorSettings['baudrate'])
267+
return;
268+
const baudRateSettings = pluggableMonitorSettings['baudrate'];
269+
baudRateSettings.selectedValue = value;
270+
this.monitorManagerProxy.changeSettings(pluggableMonitorSettings);
266271
};
267272
}

arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,12 @@ export class PlotterFrontendContribution extends Contribution {
8888
let baudrates: number[] = [];
8989
let currentBaudrate = -1;
9090
if (board && port) {
91-
const settings = this.monitorManagerProxy.getCurrentSettings(board, port);
92-
if ('baudrate' in settings) {
91+
const { pluggableMonitorSettings } =
92+
this.monitorManagerProxy.getCurrentSettings(board, port);
93+
if (pluggableMonitorSettings && 'baudrate' in pluggableMonitorSettings) {
9394
// Convert from string to numbers
94-
baudrates = settings['baudrate'].values.map((b) => +b);
95-
currentBaudrate = +settings['baudrate'].selectedValue;
95+
baudrates = pluggableMonitorSettings['baudrate'].values.map((b) => +b);
96+
currentBaudrate = +pluggableMonitorSettings['baudrate'].selectedValue;
9697
}
9798
}
9899

arduino-ide-extension/src/common/protocol/monitor-service.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { Event, JsonRpcServer } from '@theia/core';
2-
import { MonitorSettings } from '../../node/monitor-settings/monitor-settings-provider';
2+
import {
3+
PluggableMonitorSettings,
4+
MonitorSettings,
5+
} from '../../node/monitor-settings/monitor-settings-provider';
36
import { Board, Port } from './boards-service';
47

58
export const MonitorManagerProxyFactory = Symbol('MonitorManagerProxyFactory');
@@ -12,15 +15,15 @@ export interface MonitorManagerProxy
1215
startMonitor(
1316
board: Board,
1417
port: Port,
15-
settings?: MonitorSettings
18+
settings?: PluggableMonitorSettings
1619
): Promise<void>;
1720
changeMonitorSettings(
1821
board: Board,
1922
port: Port,
20-
settings: MonitorSettings
23+
settings: PluggableMonitorSettings
2124
): Promise<void>;
2225
stopMonitor(board: Board, port: Port): Promise<void>;
23-
getCurrentSettings(board: Board, port: Port): MonitorSettings;
26+
getCurrentSettings(board: Board, port: Port): PluggableMonitorSettings;
2427
}
2528

2629
export const MonitorManagerProxyClient = Symbol('MonitorManagerProxyClient');
@@ -34,14 +37,14 @@ export interface MonitorManagerProxyClient {
3437
startMonitor(
3538
board: Board,
3639
port: Port,
37-
settings?: MonitorSettings
40+
settings?: PluggableMonitorSettings
3841
): Promise<void>;
3942
getCurrentSettings(board: Board, port: Port): MonitorSettings;
4043
send(message: string): void;
4144
changeSettings(settings: MonitorSettings): void;
4245
}
4346

44-
export interface MonitorSetting {
47+
export interface PluggableMonitorSetting {
4548
// The setting identifier
4649
readonly id: string;
4750
// A human-readable label of the setting (to be displayed on the GUI)

arduino-ide-extension/src/node/monitor-manager-proxy-impl.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
} from '../common/protocol';
77
import { Board, Port } from '../common/protocol';
88
import { MonitorManager } from './monitor-manager';
9-
import { MonitorSettings } from './monitor-settings/monitor-settings-provider';
9+
import { PluggableMonitorSettings } from './monitor-settings/monitor-settings-provider';
1010

1111
@injectable()
1212
export class MonitorManagerProxyImpl implements MonitorManagerProxy {
@@ -32,7 +32,7 @@ export class MonitorManagerProxyImpl implements MonitorManagerProxy {
3232
async startMonitor(
3333
board: Board,
3434
port: Port,
35-
settings?: MonitorSettings
35+
settings?: PluggableMonitorSettings
3636
): Promise<void> {
3737
if (settings) {
3838
await this.changeMonitorSettings(board, port, settings);
@@ -54,7 +54,7 @@ export class MonitorManagerProxyImpl implements MonitorManagerProxy {
5454
async changeMonitorSettings(
5555
board: Board,
5656
port: Port,
57-
settings: MonitorSettings
57+
settings: PluggableMonitorSettings
5858
): Promise<void> {
5959
if (!this.manager.isStarted(board, port)) {
6060
// Monitor is not running, no need to change settings
@@ -79,7 +79,7 @@ export class MonitorManagerProxyImpl implements MonitorManagerProxy {
7979
* @param port port monitored
8080
* @returns a map of MonitorSetting
8181
*/
82-
getCurrentSettings(board: Board, port: Port): MonitorSettings {
82+
getCurrentSettings(board: Board, port: Port): PluggableMonitorSettings {
8383
return this.manager.currentMonitorSettings(board, port);
8484
}
8585

arduino-ide-extension/src/node/monitor-manager.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { inject, injectable, named } from '@theia/core/shared/inversify';
33
import { Board, Port, Status } from '../common/protocol';
44
import { CoreClientAware } from './core-client-provider';
55
import { MonitorService } from './monitor-service';
6-
import { MonitorSettings } from './monitor-settings/monitor-settings-provider';
6+
import { PluggableMonitorSettings } from './monitor-settings/monitor-settings-provider';
77

88
type MonitorID = string;
99

@@ -145,7 +145,11 @@ export class MonitorManager extends CoreClientAware {
145145
* @param port port to monitor
146146
* @param settings monitor settings to change
147147
*/
148-
changeMonitorSettings(board: Board, port: Port, settings: MonitorSettings) {
148+
changeMonitorSettings(
149+
board: Board,
150+
port: Port,
151+
settings: PluggableMonitorSettings
152+
) {
149153
const monitorID = this.monitorID(board, port);
150154
let monitor = this.monitorServices.get(monitorID);
151155
if (!monitor) {
@@ -161,7 +165,7 @@ export class MonitorManager extends CoreClientAware {
161165
* @param port port monitored
162166
* @returns map of current monitor settings
163167
*/
164-
currentMonitorSettings(board: Board, port: Port): MonitorSettings {
168+
currentMonitorSettings(board: Board, port: Port): PluggableMonitorSettings {
165169
const monitorID = this.monitorID(board, port);
166170
const monitor = this.monitorServices.get(monitorID);
167171
if (!monitor) {

arduino-ide-extension/src/node/monitor-service.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { WebSocketProvider } from './web-socket/web-socket-provider';
1515
import { Port as gRPCPort } from 'arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/port_pb';
1616
import WebSocketProviderImpl from './web-socket/web-socket-provider-impl';
1717
import {
18-
MonitorSettings,
18+
PluggableMonitorSettings,
1919
MonitorSettingsProvider,
2020
} from './monitor-settings/monitor-settings-provider';
2121

@@ -28,7 +28,7 @@ export class MonitorService extends CoreClientAware implements Disposable {
2828

2929
// Settings used by the currently running pluggable monitor.
3030
// They can be freely modified while running.
31-
protected settings: MonitorSettings;
31+
protected settings: PluggableMonitorSettings;
3232

3333
// List of messages received from the running pluggable monitor.
3434
// These are flushed from time to time to the frontend.
@@ -279,7 +279,7 @@ export class MonitorService extends CoreClientAware implements Disposable {
279279
*
280280
* @returns map of current monitor settings
281281
*/
282-
currentSettings(): MonitorSettings {
282+
currentSettings(): PluggableMonitorSettings {
283283
return this.settings;
284284
}
285285

@@ -294,7 +294,7 @@ export class MonitorService extends CoreClientAware implements Disposable {
294294
private async portMonitorSettings(
295295
protocol: string,
296296
fqbn: string
297-
): Promise<MonitorSettings> {
297+
): Promise<PluggableMonitorSettings> {
298298
await this.coreClientProvider.initialized;
299299
const coreClient = await this.coreClient();
300300
const { client, instance } = coreClient;
@@ -314,7 +314,7 @@ export class MonitorService extends CoreClientAware implements Disposable {
314314
}
315315
);
316316

317-
const settings: MonitorSettings = {};
317+
const settings: PluggableMonitorSettings = {};
318318
for (const iterator of res.getSettingsList()) {
319319
settings[iterator.getSettingId()] = {
320320
id: iterator.getSettingId(),
@@ -335,7 +335,7 @@ export class MonitorService extends CoreClientAware implements Disposable {
335335
* @param settings map of monitor settings to change
336336
* @returns a status to verify settings have been sent.
337337
*/
338-
async changeSettings(settings: MonitorSettings): Promise<Status> {
338+
async changeSettings(settings: PluggableMonitorSettings): Promise<Status> {
339339
const config = new MonitorPortConfiguration();
340340
for (const id in settings) {
341341
const s = new MonitorPortSetting();
@@ -384,7 +384,9 @@ export class MonitorService extends CoreClientAware implements Disposable {
384384
this.send(message.data);
385385
break;
386386
case Monitor.Command.CHANGE_SETTINGS:
387-
const settings: MonitorSettings = JSON.parse(message.data);
387+
const settings: PluggableMonitorSettings = JSON.parse(
388+
message.data
389+
);
388390
this.changeSettings(settings);
389391
break;
390392
}

arduino-ide-extension/src/node/monitor-settings/monitor-settings-provider-impl.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { injectable } from 'inversify';
22
import { CoreClientProvider } from '../core-client-provider';
33
import {
4-
MonitorSettings,
4+
PluggableMonitorSettings,
55
MonitorSettingsProvider,
6+
MonitorSettings,
67
} from './monitor-settings-provider';
78

89
@injectable()
@@ -18,7 +19,7 @@ export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
1819
init(
1920
id: string,
2021
coreClientProvider: CoreClientProvider
21-
): Promise<MonitorSettings> {
22+
): Promise<PluggableMonitorSettings> {
2223
throw new Error('Method not implemented.');
2324

2425
// 1. query the CLI (via coreClientProvider) and return all available settings for the pluggable monitor.
@@ -33,10 +34,10 @@ export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
3334
// and adding those that are missing
3435
// ii. save the `monitorSettingsValues` in the file, using the id as the key
3536
}
36-
get(): Promise<MonitorSettings> {
37+
get(): Promise<PluggableMonitorSettings> {
3738
throw new Error('Method not implemented.');
3839
}
39-
set(settings: MonitorSettings): Promise<MonitorSettings> {
40+
set(settings: PluggableMonitorSettings): Promise<PluggableMonitorSettings> {
4041
throw new Error('Method not implemented.');
4142

4243
// 1. parse the settings parameter and remove any setting that is not defined in `monitorSettings`
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
import { MonitorSetting } from '../../common/protocol';
1+
import { MonitorModel } from '../../browser/monitor-model';
2+
import { PluggableMonitorSetting } from '../../common/protocol';
23
import { CoreClientProvider } from '../core-client-provider';
34

4-
export type MonitorSettings = Record<string, MonitorSetting>;
5+
export type PluggableMonitorSettings = Record<string, PluggableMonitorSetting>;
6+
export interface MonitorSettings {
7+
pluggableMonitorSettings?: PluggableMonitorSettings;
8+
monitorUISettings?: Partial<MonitorModel.State>;
9+
}
510

611
export const MonitorSettingsProvider = Symbol('MonitorSettingsProvider');
712
export interface MonitorSettingsProvider {
813
init(
914
id: string,
1015
coreClientProvider: CoreClientProvider
11-
): Promise<MonitorSettings>;
12-
get(): Promise<MonitorSettings>;
13-
set(settings: MonitorSettings): Promise<MonitorSettings>;
16+
): Promise<PluggableMonitorSettings>;
17+
get(): Promise<PluggableMonitorSettings>;
18+
set(settings: PluggableMonitorSettings): Promise<PluggableMonitorSettings>;
1419
}

0 commit comments

Comments
 (0)