Skip to content

Commit a7433ee

Browse files
author
Alberto Iannaccone
committed
use monitor settings provider properly
1 parent 5035b0b commit a7433ee

File tree

8 files changed

+47
-26
lines changed

8 files changed

+47
-26
lines changed

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,12 @@ export class MonitorManagerProxyClientImpl
7070
const parsedMessage = JSON.parse(message.data);
7171
if (Array.isArray(parsedMessage))
7272
this.onMessagesReceivedEmitter.fire({ messages: parsedMessage });
73-
else this.onMonitorSettingsDidChangeEmitter.fire(parsedMessage);
73+
else if (
74+
parsedMessage.command ===
75+
Monitor.MiddlewareCommand.ON_SETTINGS_DID_CHANGE
76+
) {
77+
this.onMonitorSettingsDidChangeEmitter.fire(parsedMessage.data);
78+
}
7479
};
7580
this.wsPort = addressPort;
7681
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export class MonitorWidget extends ReactWidget {
8484
);
8585
}
8686

87-
protected onAfterAttach(msg: Message): void {
87+
protected onBeforeAttach(msg: Message): void {
8888
this.update();
8989
this.toDispose.push(this.monitorModel.onChange(() => this.update()));
9090
this.getCurrentSettings().then(this.onMonitorSettingsDidChange.bind(this));

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export namespace Monitor {
7070
}
7171

7272
export type Message = {
73-
command: Monitor.ClientCommand;
73+
command: Monitor.ClientCommand | Monitor.MiddlewareCommand;
7474
data: string | MonitorSettings;
7575
};
7676
}

arduino-ide-extension/src/node/arduino-ide-backend-module.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -229,14 +229,15 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
229229
const webSocketProvider =
230230
container.get<WebSocketProvider>(WebSocketProvider);
231231

232-
const { board, port, coreClientProvider } = options;
232+
const { board, port, coreClientProvider, monitorID } = options;
233233

234234
return new MonitorService(
235235
logger,
236236
monitorSettingsProvider,
237237
webSocketProvider,
238238
board,
239239
port,
240+
monitorID,
240241
coreClientProvider
241242
);
242243
}

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

+1
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ export class MonitorManager extends CoreClientAware {
196196
const monitor = this.monitorServiceFactory({
197197
board,
198198
port,
199+
monitorID,
199200
coreClientProvider: this.coreClientProvider,
200201
});
201202
this.monitorServices.set(monitorID, monitor);

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

+2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ export interface MonitorServiceFactory {
77
(options: {
88
board: Board;
99
port: Port;
10+
monitorID: string;
1011
coreClientProvider: CoreClientProvider;
1112
}): MonitorService;
1213
}
1314

1415
export interface MonitorServiceFactoryOptions {
1516
board: Board;
1617
port: Port;
18+
monitorID: string;
1719
coreClientProvider: CoreClientProvider;
1820
}

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

+28-20
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,11 @@ export class MonitorService extends CoreClientAware implements Disposable {
6363

6464
private readonly board: Board,
6565
private readonly port: Port,
66+
private readonly monitorID: string,
6667
protected readonly coreClientProvider: CoreClientProvider
6768
) {
6869
super();
6970

70-
this.monitorSettingsProvider = {
71-
getSettings: () => ({} as Promise<PluggableMonitorSettings>),
72-
setSettings: () => ({} as Promise<PluggableMonitorSettings>),
73-
};
7471
this.onWSClientsNumberChanged =
7572
this.webSocketProvider.onClientsNumberChanged(async (clients: number) => {
7673
if (clients === 0) {
@@ -81,13 +78,19 @@ export class MonitorService extends CoreClientAware implements Disposable {
8178
}
8279
});
8380

84-
this.portMonitorSettings(port.protocol, board.fqbn!).then((settings) => {
85-
this.settings = {
86-
...this.settings,
87-
pluggableMonitorSettings: settings,
88-
};
89-
this._initialized.resolve();
90-
});
81+
this.portMonitorSettings(port.protocol, board.fqbn!).then(
82+
async (settings) => {
83+
this.settings = {
84+
...this.settings,
85+
pluggableMonitorSettings:
86+
await this.monitorSettingsProvider.getSettings(
87+
this.monitorID,
88+
settings
89+
),
90+
};
91+
this._initialized.resolve();
92+
}
93+
);
9194
}
9295

9396
get initialized(): Promise<void> {
@@ -368,22 +371,27 @@ export class MonitorService extends CoreClientAware implements Disposable {
368371
async changeSettings(settings: MonitorSettings): Promise<Status> {
369372
const config = new MonitorPortConfiguration();
370373
const { pluggableMonitorSettings } = settings;
374+
const reconciledSettings = await this.monitorSettingsProvider.setSettings(
375+
this.monitorID,
376+
pluggableMonitorSettings || {}
377+
);
371378

372-
this.webSocketProvider.sendMessage(JSON.stringify(settings));
373-
374-
if (pluggableMonitorSettings) {
375-
for (const id in pluggableMonitorSettings) {
379+
if (reconciledSettings) {
380+
for (const id in reconciledSettings) {
376381
const s = new MonitorPortSetting();
377382
s.setSettingId(id);
378-
s.setValue(pluggableMonitorSettings[id].selectedValue);
383+
s.setValue(reconciledSettings[id].selectedValue);
379384
config.addSettings(s);
380-
this.settings.pluggableMonitorSettings = {
381-
...this.settings.pluggableMonitorSettings,
382-
[id]: pluggableMonitorSettings[id],
383-
};
384385
}
385386
}
386387

388+
const command: Monitor.Message = {
389+
command: Monitor.MiddlewareCommand.ON_SETTINGS_DID_CHANGE,
390+
data: { ...settings, pluggableMonitorSettings: reconciledSettings },
391+
};
392+
393+
this.webSocketProvider.sendMessage(JSON.stringify(command));
394+
387395
if (!this.duplex) {
388396
return Status.NOT_CONNECTED;
389397
}

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
5858

5959
const { matchingSettings } = this.longestPrefixMatch(monitorId);
6060

61-
return this.reconcileSettings(matchingSettings, defaultSettings);
61+
this.monitorSettings[monitorId] = this.reconcileSettings(
62+
matchingSettings,
63+
defaultSettings
64+
);
65+
return this.monitorSettings[monitorId];
6266
}
6367

6468
async setSettings(
@@ -70,7 +74,7 @@ export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
7074

7175
const newSettings = this.reconcileSettings(
7276
settings,
73-
this.monitorSettings[monitorId]
77+
this.monitorSettings[monitorId] || {}
7478
);
7579
this.monitorSettings[monitorId] = newSettings;
7680

0 commit comments

Comments
 (0)