diff --git a/FEATURES.md b/FEATURES.md index 24d88a4b..db4fd74b 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -536,9 +536,22 @@ From channel view, Hold Enter → "Who's online?". Sends 0-hop discovery to chan ## New ideas (unprioritised) -Captured for later triage. None designed in detail yet except DM delivery status. +Captured for later triage. None designed in detail yet (DM delivery status has since shipped — see below). -### 📋 DM delivery status +### ✅ DM delivery status + +**✅ Shipped** (in `main`). A per-message marker sits at the end of each outgoing +DM row in the history and in the fullscreen message view. Deltas from the spec +that follows: +- **Pending** isn't a single `·/…` — it draws **one square dot per send attempt**, + so an auto-resent message shows its retry count at a glance. +- **Delivered / failed** use drawn **scalable mini-icons** (`✓` / `✗`) that scale + with the font, not glyph-font characters — legible on every layout (see + `icons.h`, authored as compile-time ASCII-art). +- Adds **DM auto-resend + incoming dedup**, plus a channel **"relayed into mesh"** + marker (`✓` when a repeater echo confirms the channel message went out). + +Original spec: Show whether an outgoing direct message reached the recipient, using the ACK that MeshCore already produces (no protocol change). `sendMessage()` returns diff --git a/docs/design/nearby_redesign.md b/docs/design/nearby_redesign.md index 17661bd7..96fa84fb 100644 --- a/docs/design/nearby_redesign.md +++ b/docs/design/nearby_redesign.md @@ -1,8 +1,16 @@ # Nearby Nodes — analiza i propozycja uporządkowania -> Branch: `refactor/nearby-nodes` +> Branch: `refactor/nearby-nodes` (zmergowany do `main`) > Plik źródłowy: [NearbyScreen.h](../../examples/companion_radio/ui-new/NearbyScreen.h) -> Status: **propozycja** (do akceptacji przed implementacją) +> Status: **zaimplementowane** — dokument zachowany jako zapis analizy/decyzji. +> +> **Odchylenia od propozycji (stan faktyczny):** +> - Akcji **Filter…** w menu nie ma — duplikowała cykl `LEFT/RIGHT` po typie, więc +> filtr został wyłącznie na liście (sekcja 3.1 zakładała Filter… też w menu). +> - **Sort** nie jest togglem przez Enter, lecz zmienia się **in-place przez +> `LEFT/RIGHT` na podświetlonym wierszu** w popupie (wzorzec ustawień Trail), +> a wiersz pojawia się tylko dla źródła Zapisane (skan nie ma dystansu). +> - Filtr i sort **utrzymują się** między wejściami na ekran (nie są resetowane). --- diff --git a/docs/design/trail_redesign.md b/docs/design/trail_redesign.md index e80d99fa..6ecd11b2 100644 --- a/docs/design/trail_redesign.md +++ b/docs/design/trail_redesign.md @@ -1,8 +1,9 @@ # Trail (Tools › Trail) — analiza i propozycja uporządkowania -> Branch: `refactor/trail-screen` -> Plik źródłowy: [TrailScreen.h](../../examples/companion_radio/ui-new/TrailScreen.h) (1065 linii) -> Status: **propozycja** (do akceptacji przed implementacją) +> Branch: `refactor/trail-screen` (zmergowany do `main`) +> Plik źródłowy: [TrailScreen.h](../../examples/companion_radio/ui-new/TrailScreen.h) +> Status: **zaimplementowane** — dokument zachowany jako zapis analizy/decyzji. +> Aktualny opis funkcji od strony użytkownika: [tools_screen.md › GPS Trail](../solo_features/tools_screen/tools_screen.md). --- diff --git a/docs/solo_features/tools_screen/tools_screen.md b/docs/solo_features/tools_screen/tools_screen.md index 8b4ef6af..02e1e29d 100644 --- a/docs/solo_features/tools_screen/tools_screen.md +++ b/docs/solo_features/tools_screen/tools_screen.md @@ -33,18 +33,17 @@ Filter by category with **LEFT/RIGHT** (one coherent axis — type only): Select a node to see its coordinates, distance, bearing with cardinal direction, type, and last-heard time. -**Hold Enter** opens the same **Options** menu everywhere (list and detail), with a fixed set of actions — only the unavailable ones are omitted: +**Hold Enter** opens the same **Options** menu everywhere (list and detail), in a fixed order — only the actions that apply appear: -| Action | Available when | -| --------------- | --------------------------------------- | -| Navigate | selected node has GPS | -| Ping | a public key is known for the node | -| Save waypoint | selected node has GPS | -| Filter… | always (full filter list in one popup) | -| Sort: Dist/Recent | always (toggles distance ↔ last-heard) | -| Discover scan | always (live `NODE_DISCOVER_REQ` scan) | +| Action | Available when | +| ---------------------- | -------------------------------------------------------------------------------------- | +| Navigate | selected node has GPS | +| Ping | a public key is known for the node | +| Save waypoint | selected node has GPS | +| Sort: Dist/Recent | browsing stored nodes — **LEFT/RIGHT** on the row flips distance ↔ last-heard in place | +| Discover scan / Rescan | always (live `NODE_DISCOVER_REQ` scan) | -The sort toggle switches the list (and the right-hand column) between **distance** and **last-heard**, independent of the active filter. +Filtering stays on the list itself (**LEFT/RIGHT** cycles the type), so there is no separate Filter action in the menu. **Sort** is adjusted in place: highlight the **Sort** row and tap **LEFT/RIGHT** to flip the list (and its right-hand column) between **distance** and **last-heard** without closing the menu — the same in-popup pattern as Trail's settings. The row appears only while browsing stored nodes (live-scan rows carry signal, not distance). Filter and sort are independent and **persist** across re-entry to the screen. Selecting **Ping** opens the Ping popup: