From f8f5f0054903505171d7860cc512e7e415712bf9 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Sun, 28 Sep 2025 14:38:13 +1300 Subject: [PATCH] admin cli neighbors command should sort newest to oldest --- examples/simple_repeater/MyMesh.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index e16ae56b..8dbb4565 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -706,9 +706,24 @@ void MyMesh::formatNeighborsReply(char *reply) { char *dp = reply; #if MAX_NEIGHBOURS - for (int i = 0; i < MAX_NEIGHBOURS && dp - reply < 134; i++) { - NeighbourInfo *neighbour = &neighbours[i]; - if (neighbour->heard_timestamp == 0) continue; // skip empty slots + // create copy of neighbours list, skipping empty entries so we can sort it separately from main list + int16_t neighbours_count = 0; + NeighbourInfo* sorted_neighbours[MAX_NEIGHBOURS]; + for (int i = 0; i < MAX_NEIGHBOURS; i++) { + auto neighbour = &neighbours[i]; + if (neighbour->heard_timestamp > 0) { + sorted_neighbours[neighbours_count] = neighbour; + neighbours_count++; + } + } + + // sort neighbours newest to oldest + std::sort(sorted_neighbours, sorted_neighbours + neighbours_count, [](const NeighbourInfo* a, const NeighbourInfo* b) { + return a->heard_timestamp > b->heard_timestamp; // desc + }); + + for (int i = 0; i < neighbours_count && dp - reply < 134; i++) { + NeighbourInfo *neighbour = sorted_neighbours[i]; // add new line if not first item if (i > 0) *dp++ = '\n';