mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-04 03:06:12 +00:00
fix(companion): clear stale Locator/Live Share/favourite refs on delete
Deleting a waypoint left the Locator pointed at coordinates that no longer existed (it's a coordinate snapshot, so nothing noticed). Removing a contact was worse: nothing cleared its favourite slot, its Locator/Live Share target, or its per-contact mute/melody entry, so all four kept referencing a pubkey that no longer resolved to anything. - WaypointsView's Delete now calls UITask::clearTargetIfWaypoint() first. - New AbstractUITask::onContactRemoved() hook, called from MyMesh.cpp's CMD_REMOVE_CONTACT handler, clears the favourite slot, the Locator target, and dm_notif/dm_melody entries for that pubkey. Live Share's DM target turns auto-share off instead of guessing a new recipient. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
50cd56cd0c
commit
5c4607cca9
@@ -207,6 +207,18 @@ public:
|
||||
// Unset the active target (locator_has_target = 0). Distinct from setTarget()
|
||||
// because there's no "kind" for nothing — clearing is its own operation.
|
||||
void clearTarget();
|
||||
// One-shot: if the active target is exactly this waypoint, clear it and
|
||||
// persist immediately (setTargetNow()'s save-on-the-spot policy) — called
|
||||
// from waypoint deletion so the Locator can't keep pointing at a spot
|
||||
// that no longer exists.
|
||||
void clearTargetIfWaypoint(int32_t lat_1e6, int32_t lon_1e6);
|
||||
// A contact was removed (companion app / CLI): drop any UI reference to its
|
||||
// pubkey that would otherwise dangle — a pinned favourite slot, the Locator
|
||||
// target if it was this contact, the Live Share target if it was this
|
||||
// contact (auto-share turns off rather than guessing a new recipient), and
|
||||
// any per-contact mute/melody override (those tables have only 16 shared
|
||||
// slots, so an orphan isn't just stale — it can starve other contacts).
|
||||
void onContactRemoved(const uint8_t* pub_key) override;
|
||||
// Resolve a person target (6-byte pubkey prefix) to a current position:
|
||||
// prefers an active [LOC] live share, falls back to their last-advertised
|
||||
// GPS fix. Returns false when neither is known. Optional live/ts report
|
||||
|
||||
Reference in New Issue
Block a user