From 6ea983b7c92d3cfb8fedd7f5d6988fb2160fbe8a Mon Sep 17 00:00:00 2001 From: kylebonnici Date: Fri, 4 Oct 2024 17:15:32 +0200 Subject: [PATCH] Move adding persisted data to the enumeration stage before any processing is done --- src/Device/deviceLister.ts | 44 +++++++++++++++++++++++++++++++++++++- src/Device/deviceSlice.ts | 38 ++------------------------------ 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/src/Device/deviceLister.ts b/src/Device/deviceLister.ts index 759869483..aac29b8d4 100644 --- a/src/Device/deviceLister.ts +++ b/src/Device/deviceLister.ts @@ -11,6 +11,11 @@ import logger from '../logging'; import type { AppThunk, RootState } from '../store'; import simplifyDevice from '../telemetry/simplifyDevice'; import telemetry from '../telemetry/telemetry'; +import { + getPersistedIsFavorite, + getPersistedNickname, + getPersistedSerialPortSettings, +} from '../utils/persistentStore'; import { clearWaitForDevice, clearWaitForDeviceTimeout, @@ -161,6 +166,36 @@ const removeDeviceFromList = * library for available traits. Whenever devices are attached/detached, this * will dispatch AddDevice or removeDevice and trigger events. */ + +const setPersistedData = (device: Device) => { + if (device.serialNumber) { + const newDevice = { ...device }; + newDevice.favorite = getPersistedIsFavorite(device.serialNumber); + newDevice.nickname = getPersistedNickname(device.serialNumber); + + const persistedSerialPortSettings = getPersistedSerialPortSettings( + device.serialNumber + ); + + if (persistedSerialPortSettings) { + const path = + newDevice.serialPorts?.[persistedSerialPortSettings.vComIndex] + ?.comName; + + if (path) { + newDevice.persistedSerialPortOptions = { + ...persistedSerialPortSettings.serialPortOptions, + path, + }; + } + } + + return newDevice; + } + + return device; +}; + export const startWatchingDevices = ( deviceListing: DeviceTraits, @@ -404,13 +439,20 @@ export const startWatchingDevices = const operation = await NrfutilDeviceLib.list( deviceListing, d => { + d = d.map(setPersistedData); d.forEach(onDeviceArrived); autoSelectDeviceCLI(d, doSelectDevice); }, error => { logger.error(error); }, - { onDeviceArrived, onDeviceLeft } + { + onDeviceArrived: d => { + d = setPersistedData(d); + onDeviceArrived(d); + }, + onDeviceLeft, + } ); stopNrfutilDevice = (callback?: () => void) => { diff --git a/src/Device/deviceSlice.ts b/src/Device/deviceSlice.ts index 4a42e8ff4..ce805f643 100644 --- a/src/Device/deviceSlice.ts +++ b/src/Device/deviceSlice.ts @@ -12,9 +12,6 @@ import { DeviceInfo } from '../../nrfutil/device'; import { NrfutilDevice } from '../../nrfutil/device/common'; import type { RootState } from '../store'; import { - getPersistedIsFavorite, - getPersistedNickname, - getPersistedSerialPortSettings, persistIsFavorite, persistNickname, persistSerialPortSettings as persistSerialPortSettingsToStore, @@ -69,35 +66,6 @@ const initialState: DeviceState = { devices: [], }; -const setPersistedData = (device: Device) => { - if (device.serialNumber) { - const newDevice = { ...device }; - newDevice.favorite = getPersistedIsFavorite(device.serialNumber); - newDevice.nickname = getPersistedNickname(device.serialNumber); - - const persistedSerialPortSettings = getPersistedSerialPortSettings( - device.serialNumber - ); - - if (persistedSerialPortSettings) { - const path = - newDevice.serialPorts?.[persistedSerialPortSettings.vComIndex] - ?.comName; - - if (path) { - newDevice.persistedSerialPortOptions = { - ...persistedSerialPortSettings.serialPortOptions, - path, - }; - } - } - - return newDevice; - } - - return device; -}; - const slice = createSlice({ name: 'device', initialState, @@ -130,12 +98,10 @@ const slice = createSlice({ item.serialNumber === action.payload.serialNumber || item.id === action.payload.id ); - - const device = setPersistedData(action.payload); if (index !== -1) { - state.devices[index] = device; + state.devices[index] = action.payload; } else { - state.devices.push(device); + state.devices.push(action.payload); } },