* Update Muzi R1 Neo to actively supported
* Disable Range Test module when primary channel is public/unsecured
Updated RangeTestConfig.swift to determine whether the primary channel (index 0) is operating without encryption or with a 1-byte minimal PSK.
Disabled Range Test UI controls when on a public/default channel to prevent user interaction.
Added safety enforcement in the save operation: Range Test enabled flag is automatically forced to false before sending updates to the device.
Introduced a computed property isPrimaryChannelPublic following existing code patterns and security indicators (e.g., hexDescription PSK length).
Matches the behavior implemented in the Android client for consistent policy across platforms.
---------
Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* FavoriteNodeButton: refactor task out
* AccessoryManager.connectedDeviceRole helper
* FavoriteNodeButton: show confirmation dialog when a CLIENT_BASE is trying to add a favorite
* addContactFromURL: add comment referencing upcoming change in https://github.com/meshtastic/firmware/pull/8495
* DeviceConfig: role picker: show a warning when selecting CLIENT_BASE, similar to warning shown for ROUTER
* Adjust device configuration Client Base warning text
* NodeMapContent: move Route Lines out of ForEach
* NodeMapContent: move Convex Hull out of ForEach
* NodeMapContent: Replace `position.nodePosition?` with `node`
* NodeMapContent: drop unnecessary LazyVStack in showNodeHistory
* NodeMapContent: hoist out nodeColorSwift
* Move lineCoords, loraCoords calculations within showRouteLines, showConvexHull respectively
* Hoist out repeated node.metadata?.positionFlags lookups / PositionFlags creation
* NodeMapContent: remove unused @State
* NodeMapSwiftUI: add NodeMapContentEquatableWrapper and NodeMapContentSignature to prevent frequent NodeMapContent recomputation and infinite render loops
* NodeMapSwiftUI: disable animation during SwiftUI transactions
* NodeMapContent: hoist nodeBorderColor and set allowsHitTesting(false) on history point views
* NodeMapContent: prerenderHistoryPointCircle and prerenderHistoryPointArrow to avoid thousands of vector draw operations
* NodeMapContent: Shared coordinate list for Route Lines and Convex Hull
* NodeMapContent.prerenderHistoryPointArrow: add .frame(width: 16, height: 16)
* MeshMap: change onMapCameraChange frequency to .onEnd so that zooming doesn't cause continuous SwiftUI reevaluation on every frame
* MeshMapContent: factor out reducedPrecisionMapCircles into a separate function
* MeshMapContent: when multiple reducedPrecisionCircles have the same (lat,lon,radius), just draw one (big perf boost in dense areas)
* Keep list of previous manual connections
* More descriptive manual connection rows
* Merge fixes and new way to show IP on Connect view
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
* Fix: "Retrieving nodes" significantly slower after reconnect (#1424)
The node database retrieval was calling context.save() for every single
NodeInfo packet received (250 saves for 250 nodes). This caused severe
performance degradation on reconnect when CoreData had accumulated state.
Root Cause:
- nodeInfoPacket() called context.save() immediately for each node
- With 250 nodes, this meant 250 individual CoreData save operations
- On first connection, CoreData is fresh and fast
- On reconnect, CoreData has accumulated change tracking, undo management,
and memory pressure, making each save progressively slower
- This resulted in 10+ second retrieval times vs 1-2 seconds initially
Solution:
- Added deferSave parameter to nodeInfoPacket() function
- During database retrieval (.retrievingDatabase state), defer all saves
- Perform a single batch save when database retrieval completes
(when NONCE_ONLY_DB configCompleteID is received)
- This reduces 250 saves to 1 save
Performance Impact:
- Eliminates N individual saves during node database sync
- Reduces database retrieval time back to 1-2 seconds on reconnect
- Matches first-connection performance consistently
Fixes#1424
* Revert *MessageListUnified files
---------
Co-authored-by: Martin Bogomolni <martinbogo@gmail.com>
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>