Commit Graph

731 Commits

Author SHA1 Message Date
Jack Kingsman 4f783f4f59 Fix ANOTHER failing test. God I'm tired tonight. 2026-07-25 21:57:48 -07:00
Jack Kingsman 462f895e3e Merge branch 'main' into perf/virtualize-message-list 2026-07-25 21:40:38 -07:00
Jack Kingsman 8af7622bb0 Fix e2e tests 2026-07-25 21:38:58 -07:00
Jack Kingsman fc8dec3417 Fix busted tests 2026-07-25 21:02:53 -07:00
Jack Kingsman d267075127 Add testing harness and fix up a few niggling bugs 2026-07-25 19:35:40 -07:00
Jack Kingsman f2006e15ba Optimize jump to unread to reduce flicker on large backlog load. 2026-07-25 17:53:34 -07:00
Jack Kingsman 1584151000 Don't strand at the top of the list and override pending pins with manual scroll action 2026-07-25 16:22:42 -07:00
Jack Kingsman 40f202dbeb Merge branch 'main' into pr-339
# Conflicts:
#	frontend/AGENTS.md
2026-07-25 15:19:51 -07:00
Jack Kingsman 4559fd34c2 Test improvements and trimming 2026-07-25 15:12:21 -07:00
Jack Kingsman 50d063b195 Show statistics for regional messages. Closes #338. 2026-07-25 12:46:38 -07:00
Ryan Gregg fab331e67e Virtualize the message list
A conversation rendered every message it had loaded. Nothing bounded that
work, so cost grew with history: at 2000 messages the list mounted ~20k DOM
nodes, took ~285ms to mount, and ~212ms to re-render on any update. While
that runs, nothing else on the main thread gets a turn, typing included.

Only the visible window is mounted now, measured in Chromium with the real
component tree:

  history    mount            re-render        DOM nodes
    2000     285ms -> 4ms     212ms -> 2.2ms   22038 -> 225

Rendered rows stay at ~17 regardless of how much history is loaded.

Row heights are measured rather than assumed, since messages vary from one line
to a wrapped paragraph with path badges, so the scroll behaviors that used
to do height arithmetic now anchor by index instead, which is exact even
when off-screen rows still carry estimated heights:

- opening a conversation, and following new messages, anchor to the last row
- loading older messages anchors to the message that was on top
- jump-to-message and jump-to-unread scroll by index, since the target row
  may not be mounted yet

Two degenerate cases are handled explicitly: a viewport that measures zero
(before first layout, hidden tab) falls back to a nominal height instead of
collapsing the window to nothing, and a row that measures zero keeps its
estimate instead of ballooning the window.

Most of the diff is re-indentation from the new wrapper element; the real
change is 112 added / 36 removed lines (git diff -w).
2026-07-25 12:32:14 -07:00
Ryan Gregg 5e5ab7db4d Keep overheard packet traffic out of the chat render path
Typing in a conversation got progressively slower as its history grew.
The cause was not the input: every packet the node overhears was stored
in App state, so each one re-rendered the whole tree, including the
un-memoized MessageList. That cost scales with history length, and on a
busy mesh it saturated the main thread so keystrokes queued behind it.

Measured in Chromium with the real components, cost per overheard packet:

  history    before    after
      50      7.3ms    ~0ms
     500     48.5ms    ~0ms
    1000     97.7ms    ~0ms
    2000    228.4ms    ~0ms

The packet stream now lives in a small external store that views subscribe
to individually, so only the map, visualizer, raw feed, and cracker re-render
when a packet arrives, so the chat view is no longer along for the ride.
This also retires useRawPacketStatsSession, whose session state was App
state for the same reason.
2026-07-25 12:32:14 -07:00
Jack Kingsman 9fc343c4fd Add telemetry CSV export. Closes #334. 2026-07-21 12:06:52 -07:00
Jack Kingsman 6f743446b0 Add customizable date binning on map. Closes #330. 2026-07-21 11:54:09 -07:00
Jack Kingsman bc22f537d9 Add packet analyzer launch to visualizer feed. Closes #328. 2026-07-21 11:42:34 -07:00
Jack Kingsman d2e3b05a38 Add hop width bit display display. Closes #323. 2026-07-10 15:34:12 -07:00
Jack Kingsman 5da6e19c9b Add repeater region discover 2026-07-10 15:00:14 -07:00
Jack Kingsman ed7954552d Merge pull request #322 from jkingsman/alternate-repeater-detail-fetch
Try using direct admin-binary fetch
2026-07-10 12:49:27 -07:00
jkingsman 6f21a6c364 Maybe we actually fixed the flaky test this time 2026-07-09 17:08:32 -07:00
jkingsman 6c977f9108 Add repeater region display. Closes #309. 2026-07-09 16:37:14 -07:00
jkingsman 387c9b0e0a Add packet search to raw feed. Closes #320. 2026-07-09 14:56:31 -07:00
jkingsman ee32a266db Try using direct admin-binary fetch 2026-07-09 14:33:59 -07:00
Jack Kingsman 0633ab724c Misc bugs around dm region scope + scope display, and flood-scope leak 2026-07-08 20:11:57 -07:00
Jack Kingsman f9b991b1a8 Fix giphy rendering issue. Closes #291. 2026-07-08 17:23:51 -07:00
Jack Kingsman 4385ea5703 Add clearer regional scoping for bots. Closes #300. 2026-07-08 17:08:04 -07:00
Jack Kingsman 97b873e991 Defer chart render until flyin is settled. Closes #317. 2026-07-08 16:47:41 -07:00
Jack Kingsman 0db80dd054 Merge pull request #307 from Bjorkan/fixRegions. Closes #303.
Fix unscoped flood-scope handling
2026-07-08 15:51:50 -07:00
Jack Kingsman 6edd2927b1 Gate scoping-safety on firmware ref, and and make per-channel override tristate. 2026-07-08 15:45:58 -07:00
Jack Kingsman 84e6c34255 Allow favorites to be sorted by type. Closes #314. 2026-07-08 14:57:29 -07:00
Jack Kingsman 2fcbefac3b Add duty cycle display to repeaters. Closes #308. 2026-07-08 14:47:50 -07:00
Jack Kingsman a6c64279e8 Plumb through total neighbor count from radio and expose that in the UI. Closes #310. 2026-07-08 14:09:08 -07:00
Björkan 2118c83bc4 Stabilize app startup hash test timeout 2026-07-03 19:02:25 +02:00
Jack Kingsman 7b334160ce Be more forgiving around hashtag channel names 2026-06-30 14:43:05 -07:00
jkingsman ce4946351f Allow bots to send region scoped messages 2026-06-27 00:36:28 -07:00
jkingsman 4b4dfb0767 Add incoming region to kwargs 2026-06-26 21:26:58 -07:00
Jack Kingsman 1af9c3bfcf Fix floating point issues on recharts 2026-06-25 11:35:50 -07:00
Jack Kingsman 7560fe26ec Updating changelog + build for 3.15.2 2026-06-23 21:34:51 -07:00
Jack Kingsman 3a78bf36ac filter out geo from non-geo sensors, and publish gps for device tracking 2026-06-22 17:34:44 -07:00
Jack Kingsman 048e03d99b Maybe finally fix that flaky test?? 2026-06-20 22:12:51 -07:00
Jack Kingsman 8d8bc13a3b Add option to disable scroll. Closes #299. 2026-06-20 21:53:28 -07:00
Jack Kingsman 66148c2c39 Autobackfill regions 2026-06-20 21:48:16 -07:00
Jack Kingsman 06556a853d Add draft reactions + gifs; region resolution 2026-06-20 21:30:51 -07:00
Jack Kingsman cb4d4ca584 Merge pull request #274 from fred777/fred777-add_bot_globals
Introduce _bot_globals for persistent data storage between bot executions
2026-06-20 18:03:56 -07:00
jkingsman 85574f7747 Make repeater neighbor pane sortable. Closes #290. 2026-06-17 18:19:15 -07:00
jkingsman 7198d92c74 Use the correct last-heard time for repeater recency sorting 2026-06-15 22:13:38 -07:00
fred777 f1e853ea0a Merge remote-tracking branch 'origin/main' into fred777-add_bot_globals 2026-06-12 16:34:00 +02:00
Jack Kingsman 9391116d53 Compact the trace panes. Closes #285. 2026-06-11 22:13:41 -07:00
Jack Kingsman 01c4dd1df7 Add recently traced contacts as a sort category in the trace pane. Closes #286. 2026-06-11 21:55:51 -07:00
Jack Kingsman e1e0b48437 Add 'Reverse Link' button to trace pane. Closes #287. 2026-06-11 21:22:07 -07:00
Jack Kingsman fb848d2e8d Add outbound message opt-in for apprise 2026-06-11 20:42:29 -07:00