Skip to content

Commit 621b1fa

Browse files
staticoclaude
andcommitted
Add Shift+X to bulk-remove unknown nodes from node list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 297e18b commit 621b1fa

3 files changed

Lines changed: 27 additions & 1 deletion

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@meshtastic/cli-viewer",
3-
"version": "1.10.0",
3+
"version": "1.11.0",
44
"type": "module",
55
"scripts": {
66
"dev": "bun run src/index.ts",

src/ui/App.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,6 +1435,27 @@ export function App({ address, packetStore, nodeStore, skipConfig = false, skipN
14351435
}
14361436
}, [myNodeNum, transport, nodeStore, showNotification]);
14371437

1438+
const removeAllUnknownNodes = useCallback(async () => {
1439+
if (!transport || !myNodeNum) return;
1440+
const unknownNodes = nodes.filter(n => n.num !== myNodeNum && (!n.shortName || n.shortName === "???"));
1441+
if (unknownNodes.length === 0) {
1442+
showNotification("No unknown nodes to remove");
1443+
return;
1444+
}
1445+
let removed = 0;
1446+
for (const node of unknownNodes) {
1447+
try {
1448+
const binary = adminHelper.createRemoveNodeRequest(node.num, { myNodeNum });
1449+
await transport.send(binary);
1450+
nodeStore.removeNode(node.num);
1451+
removed++;
1452+
} catch { /* continue removing others */ }
1453+
}
1454+
setNodes((prev) => prev.filter((n) => n.num === myNodeNum || (n.shortName && n.shortName !== "???")));
1455+
setSelectedNodeIndex(0);
1456+
showNotification(`Removed ${removed} unknown node${removed !== 1 ? "s" : ""}`);
1457+
}, [myNodeNum, transport, nodes, nodeStore, showNotification]);
1458+
14381459
const toggleFavoriteNode = useCallback(async (nodeNum: number) => {
14391460
if (!transport || !myNodeNum) return;
14401461
const node = nodes.find((n) => n.num === nodeNum);
@@ -2291,6 +2312,10 @@ export function App({ address, packetStore, nodeStore, skipConfig = false, skipN
22912312
if (input === "x" && selectedNode && selectedNode.num !== myNodeNum) {
22922313
removeNode(selectedNode.num);
22932314
}
2315+
// 'X' (shift+x) to remove all unknown nodes
2316+
if (input === "X") {
2317+
removeAllUnknownNodes();
2318+
}
22942319
if (input === "f" && selectedNode) {
22952320
toggleFavoriteNode(selectedNode.num);
22962321
}

src/ui/components/HelpDialog.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ const nodeKeys = [
5454
{ key: "f", desc: "Toggle favorite" },
5555
{ key: "I", desc: "Toggle ignored" },
5656
{ key: "x", desc: "Remove node from DB" },
57+
{ key: "X", desc: "Remove all unknown nodes" },
5758
];
5859

5960
const chatKeys = [

0 commit comments

Comments
 (0)