* 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>
* Remove extra want config call when adding a contact
* App badge and unnecessary notification fixes (#1455)
* - Fix for app badge not going to zero if a message arrives while you have that chat open
- Fix for push notifications popping up when a message is received while that chat is open
* Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message
* Fix: Channels help grammer fix (#1452)
* remove outdated TCP not available on Apple devices (#1450)
* Update initial onboarding view
* remove toggle gating for mac
* Update crash reporting opt out in real time
* Update onboarding text
* Use mDNS text records for node name
* TCP IP and port on the connection screen
* Hide app icon chooser on mac
* Infinite loop hang bugfixes and performance improvements for both `UserMessageList` and `ChannelMessageList` (#1465)
* 2.7.5 Working Changes (#1460)
* Remove extra want config call when adding a contact
* App badge and unnecessary notification fixes (#1455)
* - Fix for app badge not going to zero if a message arrives while you have that chat open
- Fix for push notifications popping up when a message is received while that chat is open
* Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message
* Fix: Channels help grammer fix (#1452)
* remove outdated TCP not available on Apple devices (#1450)
* Update initial onboarding view
* remove toggle gating for mac
* Update crash reporting opt out in real time
* Update onboarding text
---------
Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>
* UserEntity: add mostRecentMessage and unreadMessages with early exit when lastMessage is nil, and fetch 1 row (not N) otherwise
* UserList: replace 5 slow calls to user.messageList with new fast calls
* NodeList: always put the connected node at the top of list (if it matches the node filters)
* ChannelEntity: add faster mostRecentPrivateMessage and unreadMessages which fetch 1 row (not N)
* ChannelList: replace 5 calls to channel.allPrivateMessage with new fast calls
* Fix incorrect appState.unreadDirectMessages calculations
* MyInfoEntity: also fix unreadMessages count here to be fast, and use it for appState.unreadChannelMessages
* UserMessageList: use @FetchRequest to prevent the N^2 behavior that was happening in calls to allPrivateMessages
* Refactor ChannelEntityExtension and MyInfoEntityExtension to be more similar to UserEntityExtension
* Remove SwiftUI-infinite-loop-causing `.id(redrawTapbacksTrigger)` in ChannelMessageList and UserMessageList (duplicate row ids)
* MyInfoEntityExtension: exclude emoji tapbacks (which never get marked as read anyway) from unread message count
* Add SaveChannelLinkData so MessageText and MeshtasticApp can use .sheet(item: ...) and avoid infinite loop hang due to Binding rebuild
* ChannelMessageList and UserMessageList: switch to stable messageId for ForEach SwiftUI row identity
* ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification
* ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear
* ChannelMessageList and UserMessageList: block spurious markMessagesAsRead when this View is not active
---------
Co-authored-by: Garth Vander Houwen <garth@meshtastic.com>
Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>
* message-list-performance: revert scrolling changes (#1472)
* Revert e0f0b4a0f7 (ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear)
* Revert "ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification"
This reverts commit ee1a7c4415.
---------
Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu>
* Remove extra want config call when adding a contact
* App badge and unnecessary notification fixes (#1455)
* - Fix for app badge not going to zero if a message arrives while you have that chat open
- Fix for push notifications popping up when a message is received while that chat is open
* Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message
* Fix: Channels help grammer fix (#1452)
* remove outdated TCP not available on Apple devices (#1450)
* Update initial onboarding view
* remove toggle gating for mac
* Update crash reporting opt out in real time
* Update onboarding text
---------
Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com>
Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com>
Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com>
* Update messaging list separator insets
* Dont show unread messages or notifications for emoji reactions matching iMessage.
* Restore ble state method (#1416)
* Restore BLE State
* Log privacy
* AccessoryManager to handle restored connection
* Comment task out
* Update restore state function based on conversation with jake
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Two Column Node List (#1425)
* Restore BLE State
* Log privacy
* AccessoryManager to handle restored connection
* Comment task out
* Switch the node list to a two column layout
* Keep asian translations of channel details string
* Update restore state function based on conversation with jake
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLETransport.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* always show node list search bar
* Update auto correct modifier
* Dont show online animations for ios 17, remove online animation from node map, remove online circle from position popover
* Work in progress.
* Update detents
* Gate the discovery process while restoring
* Use geometry reader to size weather tiles on node details
* Update BLE Transport
* Update location weather condistion styles
* Log privacy in didReceive
* Remove extra dividers from admin key config, fix onboarding typo
* Bump minimum catalyst target
* Bump mac target version
* Use @FetchRequest for UserList to try and use less memory on ios 17
* Revert change to @fetchrequest
* Stab in the dark for Devices crash
* Updated UserList (back?) to @FetchRequest
* Set mac minimum to 15
* Nil out continuation after use
* Use @FetchRequest for the node list to stop crashes on iOS 17
* Handle failed connections during restoration
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update protos
* Update protos
* Remove stale keys
* Serbian translations update (#1422)
* Log privacy
* Add Serbian translations
---------
Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com>
* Clarify public key sub-text in security settings (#1412)
* Clarify public key sub-text in settings
* Trigger lint
* freq slot num pad (#1410)
* kill keyboard toolbar on lora config
* delete extranious scrollDismissesKeyboard
* Properly set catalyst target
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Views/Settings/Config/SecurityConfig.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update Meshtastic/Enums/DeviceEnums.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Make current location nilable, remove log spam
* clean up toUser logic
* Fix telemetry entity not added in nodeInfoPacket
* fix typo: powerMetrics.hasChXCurrent mismatch
* Duplicate decoding of telemetry.current removed
* Clean up mesh map fetch request and distance filter logic
* Revert attempt to fix message logic
* Bump datadog version
* Missing message fix, attempt #2 (#1431)
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
* Retry fewer times for longer
* Revert "Missing message fix, attempt #2 (#1431)" (#1432)
This reverts commit a96d318adb.
* Make retry 2 seconds
* Add back link to node details from position popover without navigation stack and link, clear notifications when deleting database
* Add clear notifications function
* Link from channel messages to node info
* Link to node details
* Discovery on retry fix
* Discovery on retry fix fix
* Add contact to device node db if you get an encrypted send faild routing error
* Seperate channel message view into two views for better performance.
* Refactor User Message List
* Update device hardware
Add liquid glass to config save button
* Save button cleanup
* Update button structure on users view
* Move encrypted send logic out of the router. Update protos
* Restore node long- and short- names (#1442)
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
* Update Meshtastic/Accessory/Transports/Bluetooth Low Energy/BLEConnection.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Revert routing error
* Toggle for enabling device telemetry broadcast enable
* Update
* Enhancements for interval dropdowns (#1445)
* Cleanup
* Fix core data version
* Add never to update interval
* Device telemetry Enabled Boolean (#1446)
* Update core data and interval picker
* Move formatter
* Rework to nest options under enabled
* Clearer names
* Safer devicehardware api call, remove node history filter from mesh map
* Fix build
* Simplify mesh map filter
* Remove stale translation keys
---------
Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Nikola Dašić <dasic.nikola@yandex.com>
Co-authored-by: Spencer Smith <dontaskspencer@gmail.com>
Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Bump version
* iOS 26 styled keyboard toolbar
Update tips backgrounds
* Link the logo to the about page
* Remove double logo on node list, update scary location log message, update tls toggle visibility and keyboard scroll dismiss on mqtt config
* Remove redundant colorScheme check
* Change background for textfield from a capsule to a RoundedRectangle
* Fix device metrics crash
* Add back rule marks for network colors
* Remove broken navigation from circle text control.
* Move rule marks out of foreach
* Bump version
* iOS 26 styled keyboard toolbar
Update tips backgrounds
* Link the logo to the about page
* Remove double logo on node list, update scary location log message, update tls toggle visibility and keyboard scroll dismiss on mqtt config
* Remove redundant colorScheme check
* Change background for textfield from a capsule to a RoundedRectangle
* Fix device metrics crash
* Add back rule marks for network colors
* Bump version
* iOS 26 styled keyboard toolbar
Update tips backgrounds
* Link the logo to the about page
* Remove double logo on node list, update scary location log message, update tls toggle visibility and keyboard scroll dismiss on mqtt config
* Remove redundant colorScheme check
* Change background for textfield from a capsule to a RoundedRectangle
* Bump version
* iOS 26 styled keyboard toolbar
Update tips backgrounds
* Link the logo to the about page
* Remove double logo on node list, update scary location log message, update tls toggle visibility and keyboard scroll dismiss on mqtt config
* Remove redundant colorScheme check