mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-02 10:51:57 +00:00
feat(route): trace per link, to the node or the last repeater, find where it stops; channel order re-sorts on entry
Core: PathEditor results are links (node k hearing k-1 and back); toNode() off traces only the repeaters (a companion answers only with repeat on); probe() traces to each repeater in turn after no reply; failures carry a reason; an empty list saves "direct". PingEngine takes over a slot left past its timeout. A kept route: the dropped heard path isn't announced to the app nor bumps lastmod; an app update keeps the flag only if it leaves the route. Marker boxes sized for every dot and name (overflow). ui-lvgl Route: one line per node with out / back dB coloured by quality, tap a hop to move / remove, tap the node to include it, Keep in the header, Find where beside a no-reply status. ui-new Path: To node / Find break rows, result alerts, cursor kept on its action. Channels: ui-new re-sorts the list on entering it, cursor on the same channel. Docs: Path and trace, Channel order. Sim hooks: open route, add channel, open messages. Checked in the browser sim (L2 + ui-new peer + repeater); not on hardware. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -839,6 +839,16 @@ class MessagesScreen : public UIScreen {
|
||||
_num_channels = chanctl::order(p, _history, _channel_indices, p && p->ch_fav_only);
|
||||
}
|
||||
|
||||
// Into the channel list, sorted afresh (a "Newest" order follows the last
|
||||
// message), the cursor on channel `keep_ch` (a slot) wherever it now is.
|
||||
void enterChannelList(int keep_ch) {
|
||||
buildChannelList();
|
||||
for (int i = 0; i < _num_channels; i++)
|
||||
if (_channel_indices[i] == keep_ch) { _channel_sel = i; break; }
|
||||
if (_channel_sel > _num_channels) _channel_sel = _num_channels; // the Add row at most
|
||||
_phase = CHANNEL_PICK;
|
||||
}
|
||||
|
||||
// Advance one of the contact menu's value rows. dir is +1 for RIGHT and for
|
||||
// Enter (which PopupMenu reports as VALUE_NEXT on a value row), -1 for LEFT.
|
||||
void cycleContactCtxValue(int sel, int dir) {
|
||||
@@ -1953,7 +1963,7 @@ public:
|
||||
}
|
||||
if (c == KEY_ENTER) {
|
||||
if (_mode_sel == 1) {
|
||||
_phase = CHANNEL_PICK;
|
||||
enterChannelList(_channel_sel < _num_channels ? _channel_indices[_channel_sel] : -1);
|
||||
} else {
|
||||
_room_mode = (_mode_sel == 2);
|
||||
if (_room_mode) _task->clearRoomUnread();
|
||||
@@ -2448,7 +2458,7 @@ public:
|
||||
}
|
||||
if (c == KEY_CANCEL) {
|
||||
if (_direct_entry) { _direct_entry = false; _task->gotoHomeScreen(); }
|
||||
else { _phase = CHANNEL_PICK; }
|
||||
else { enterChannelList(_sel_channel_idx); }
|
||||
return true;
|
||||
}
|
||||
// Newest (index 0) now renders at the bottom, oldest at the top (see the
|
||||
|
||||
Reference in New Issue
Block a user