mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-06-17 17:46:33 +00:00

* backend structure WIP * Scaffold interfaces and classes for pluggable monitors * Implement MonitorService to handle pluggable monitor lifetime * Rename WebSocketService to WebSocketProvider and uninjected it * Moved some interfaces * Changed upload settings * Enhance MonitorManager APIs * Fixed WebSocketChange event signature * Add monitor proxy functions for the frontend * Moved settings to MonitorService * Remove several unnecessary serial monitor classes * Changed how connection is handled on upload * Proxied more monitor methods to frontend * WebSocketProvider is not injectable anymore * Add generic monitor settings storaging * More serial classes removal * Remove unused file * Changed plotter contribution to use new manager proxy * Changed MonitorWidget and children to use new monitor proxy * Updated MonitorWidget to use new monitor proxy * Fix backend logger bindings * Delete unnecessary Symbol * coreClientProvider is now set when constructing MonitorService * Add missing binding * Fix `MonitorManagerProxy` DI issue * fix monitor connection * delete duplex when connection is closed * update arduino-cli to 0.22.0 * fix upload when monitor is open * add MonitorSettingsProvider interface * monitor settings provider stub * updated pseudo code * refactor monitor settings interfaces * monitor service provider singleton * add unit tests * change MonitorService providers to injectable deps * fix monitor settings client communication * refactor monitor commands protocol * use monitor settings provider properly * add settings to monitor model * add settings to monitor model * reset serial monitor when port changes * fix serial plotter opening * refine monitor connection settings * fix hanging web socket connections * add serial plotter reset command * send port to web socket clients * monitor service wait for success serial port open * fix reset loop * update serial plotter version * update arduino-cli version to 0.23.0-rc1 and regenerate grpc protocol * remove useless plotter protocol file * localize web socket errors * clean-up code * update translation file * Fix duplicated editor tabs (#1012) * Save dialog for closing temporary sketch and unsaved files (#893) * Use normal `OnWillStop` event * Align `CLOSE` command to rest of app * Fixed FS path vs encoded URL comparision when handling stop request. Ref: https://github.com/eclipse-theia/theia/issues/11226 Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * Fixed the translations. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * Fixed the translations again. Removed `electron` from the `nls-extract`. It does not contain app code. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * Aligned the stop handler code to Theia. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> Co-authored-by: Akos Kitta <a.kitta@arduino.cc> * fix serial monitor send line ending * refactor monitor-service poll for test/readability * localize web socket errors * update translation file * Fix duplicated editor tabs (#1012) * i18n:check rerun * Speed up IDE startup time. Signed-off-by: Akos Kitta <a.kitta@arduino.cc> * override coreClientProvider in monitor-service * cleanup merged code Co-authored-by: Francesco Stasi <f.stasi@me.com> Co-authored-by: Silvano Cerza <silvanocerza@gmail.com> Co-authored-by: Mark Sujew <mark.sujew@typefox.io> Co-authored-by: David Simpson <45690499+davegarthsimpson@users.noreply.github.com> Co-authored-by: Akos Kitta <a.kitta@arduino.cc>
82 lines
2.5 KiB
TypeScript
82 lines
2.5 KiB
TypeScript
import { PluggableMonitorSettings } from './monitor-settings-provider';
|
|
|
|
export function longestPrefixMatch(
|
|
id: string,
|
|
monitorSettings: Record<string, PluggableMonitorSettings>
|
|
): {
|
|
matchingPrefix: string;
|
|
matchingSettings: PluggableMonitorSettings;
|
|
} {
|
|
const separator = '-';
|
|
const idTokens = id.split(separator);
|
|
|
|
let matchingPrefix = '';
|
|
let matchingSettings: PluggableMonitorSettings = {};
|
|
|
|
const monitorSettingsKeys = Object.keys(monitorSettings);
|
|
|
|
for (let i = idTokens.length - 1; i >= 0; i--) {
|
|
const prefix = idTokens.slice(0, i + 1).join(separator);
|
|
|
|
for (let k = 0; k < monitorSettingsKeys.length; k++) {
|
|
if (monitorSettingsKeys[k].startsWith(prefix)) {
|
|
matchingPrefix = prefix;
|
|
matchingSettings = monitorSettings[monitorSettingsKeys[k]];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (matchingPrefix.length) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return { matchingPrefix, matchingSettings };
|
|
}
|
|
|
|
export function reconcileSettings(
|
|
newSettings: PluggableMonitorSettings,
|
|
defaultSettings: PluggableMonitorSettings
|
|
): PluggableMonitorSettings {
|
|
// create a map with all the keys, merged together
|
|
const mergedSettingsKeys = Object.keys({
|
|
...defaultSettings,
|
|
...newSettings,
|
|
});
|
|
|
|
// for every key in the settings, we need to check if it exist in the default
|
|
for (const key of mergedSettingsKeys) {
|
|
// remove from the newSettings if it was not found in the default
|
|
if (defaultSettings[key] === undefined) {
|
|
delete newSettings[key];
|
|
}
|
|
// add to the newSettings if it was missing
|
|
else if (newSettings[key] === undefined) {
|
|
newSettings[key] = defaultSettings[key];
|
|
}
|
|
// if the key is found in both, reconcile the settings
|
|
else {
|
|
// save the value set by the user
|
|
const value = newSettings[key].selectedValue;
|
|
|
|
// settings needs to be overwritten with the defaults
|
|
newSettings[key] = defaultSettings[key];
|
|
|
|
// if there are no valid values defined, assume the one selected by the user is valid
|
|
// also use the value if it is a valid setting defined in the values
|
|
if (
|
|
!Array.isArray(newSettings[key].values) ||
|
|
newSettings[key].values.length === 0 ||
|
|
newSettings[key].values.includes(value)
|
|
) {
|
|
newSettings[key].selectedValue = value;
|
|
} else {
|
|
// if there are valid values but the user selected one that is not valid, fallback to the first valid one
|
|
newSettings[key].selectedValue = newSettings[key].values[0];
|
|
}
|
|
}
|
|
}
|
|
|
|
return newSettings;
|
|
}
|