diff --git a/meshview/templates/net.html b/meshview/templates/net.html
index d3c21be..46524e4 100644
--- a/meshview/templates/net.html
+++ b/meshview/templates/net.html
@@ -65,6 +65,7 @@ document.addEventListener("DOMContentLoaded", async () => {
}
const renderedPacketIds = new Set();
+ const renderedNodeIds = new Set();
let netTranslations = {};
let netTag = "";
@@ -95,7 +96,7 @@ document.addEventListener("DOMContentLoaded", async () => {
Update count
----------------------------------- */
function updateTotalCount() {
- totalCountValueEl.textContent = renderedPacketIds.size;
+ totalCountValueEl.textContent = renderedNodeIds.size;
}
/* -----------------------------------
@@ -104,6 +105,7 @@ document.addEventListener("DOMContentLoaded", async () => {
function renderPacket(packet) {
if (renderedPacketIds.has(packet.id)) return;
renderedPacketIds.add(packet.id);
+ renderedNodeIds.add(packet.from_node_id);
const date = new Date(packet.import_time_us / 1000);
@@ -161,7 +163,18 @@ document.addEventListener("DOMContentLoaded", async () => {
----------------------------------- */
function renderPacketsEnsureDescending(packets) {
if (!packets || !packets.length) return;
- const sorted = packets.slice().sort((a, b) => b.import_time_us - a.import_time_us);
+ const earliestByNode = new Map();
+
+ for (const packet of packets) {
+ const existing = earliestByNode.get(packet.from_node_id);
+ if (!existing || packet.import_time_us < existing.import_time_us) {
+ earliestByNode.set(packet.from_node_id, packet);
+ }
+ }
+
+ const sorted = Array.from(earliestByNode.values()).sort(
+ (a, b) => b.import_time_us - a.import_time_us
+ );
for (let i = sorted.length - 1; i >= 0; i--) {
renderPacket(sorted[i]);
}