9 Commits

Author SHA1 Message Date
pe1hvh 4a58a95cf0 fix: channel attribution, dedup, cache bugs + channel edit/move (v1.19.0)
fix(packet_decoder): brute-force channel resolution when hash lookup fails

ChannelCrypto.calculate_channel_hash() and the MeshCore firmware compute
different channel identifiers for the same secret, causing _hash_to_idx to
return None for all hashtag-channel messages. Fallback: try each registered
key individually via a single-key keystore. First valid decryption wins.
Result cached in _hash_to_idx for O(1) resolution on subsequent packets.

fix(events): channel-agnostic sentinel prevents cross-channel duplicates

on_rx_log now marks '*' in DualDeduplicator after storing a message.
on_channel_msg checks this sentinel and suppresses storage regardless of
channel_idx or message_hash differences between the two library systems.
Fixes #mc-radar messages appearing in #weather and vice versa.

fix(events): secondary path-cache keyed by content for hash-mismatch

_path_cache keyed by meshcoredecoder hash; CHANNEL_MSG_RECV carries meshcore
hash (different value). Added _path_cache_by_content ("sender:text[:100]")
as fallback so path_hashes are recovered when the two hashes disagree.

fix(commands,cache): remove stale channel key after del_channel reindex

Cache entry for old_idx not removed after slot move, causing same channel
to appear twice. New DeviceCache.remove_channel_key(idx) called after each
move. asyncio.sleep(0.5) added before re-discovery to let device settle.

feat(channel_panel,commands,dashboard): channel edit — move/reindex support

First channel-edit capability in the GUI. New '↕️ Move / Reindex' mode in
Channel Manager dialog. Source channel selected from dropdown, target index
in number field. ↕ button inline with 🗑 in Messages and Archive submenus.
_cmd_move_channel reads secret from cache or device, writes new slot, clears
old slot, updates cache atomically, triggers re-discovery with settle delay.
2026-04-06 10:23:24 +02:00
pe1hvh 71a5ebca74 fix: route back-button and map popup flicker (#1.13.5)
- Replace two fixed-destination back-buttons on the route page with a
  single arrow_back button using window.history.back(), so navigation
  always returns to the calling screen (Messages or Archive).

- Guard setIcon() and setPopupContent() in applyDevice/applyContacts
  behind isPopupOpen() to prevent popup flickering on the 500 ms
  update tick.

- Set fadeAnimation: false and markerZoomAnimation: false on both
  Leaflet map instances (main map and route map) to eliminate popup
  flash on first click, particularly noticeable on Raspberry Pi.
2026-03-14 05:25:07 +01:00
pe1hvh 72167ba130 HotFix3 2026-03-12 14:26:38 +01:00
pe1hvh 637551cdad HotFix1 2026-03-12 13:49:47 +01:00
pe1hvh c30eb5a467 HotFixPerformance 2026-03-12 13:15:58 +01:00
pe1hvh d2a63c784a HotFix2 2026-03-12 06:12:16 +01:00
pe1hvh fa7417d33e HotFix 2026-03-12 06:02:31 +01:00
pe1hvh b5fc0ec388 v1.13.2 BugFix 2026-03-11 05:54:48 +01:00
pe1hvh d8a7947c6b Initial clean code 2026-03-09 17:53:29 +01:00