mirror of
https://github.com/MarekWo/mc-webui.git
synced 2026-08-12 11:42:56 +02:00
fix: Remove non-functional Node Discovery feature
Removed Node Discovery feature that was experiencing persistent timeout
issues. Feature attempted to scan mesh network for nearby repeaters but
consistently failed due to bridge timing constraints.
Changes:
- Remove node_discover() function from cli.py
- Remove 'node_discover' from SPECIAL_COMMANDS in api.py
- Remove Discover Nodes button and modal from base.html
- Remove discoverNodes() and displayNodeDiscoveryResults() from app.js
- Remove Discover Nodes documentation from README.md
IMPORTANT: Advert message cleanup ("Advert sent") is preserved and
working correctly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -303,17 +303,6 @@ function setupEventListeners() {
|
||||
}
|
||||
await executeSpecialCommand('floodadv');
|
||||
});
|
||||
|
||||
// Node Discovery Modal: Load nodes when opened
|
||||
const nodeDiscoveryModal = document.getElementById('nodeDiscoveryModal');
|
||||
nodeDiscoveryModal.addEventListener('show.bs.modal', function() {
|
||||
discoverNodes();
|
||||
});
|
||||
|
||||
// Node Discovery: Refresh button
|
||||
document.getElementById('refreshDiscoveryBtn').addEventListener('click', function() {
|
||||
discoverNodes();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1264,105 +1253,6 @@ async function copyChannelKey() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Discover nearby mesh nodes (repeaters)
|
||||
*/
|
||||
async function discoverNodes() {
|
||||
// Show loading state
|
||||
document.getElementById('nodeDiscoveryStatus').style.display = 'block';
|
||||
document.getElementById('nodeDiscoveryResults').style.display = 'none';
|
||||
document.getElementById('nodeDiscoveryError').style.display = 'none';
|
||||
document.getElementById('nodeDiscoveryEmpty').style.display = 'none';
|
||||
|
||||
// Disable refresh button during discovery
|
||||
const refreshBtn = document.getElementById('refreshDiscoveryBtn');
|
||||
refreshBtn.disabled = true;
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/device/command', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ command: 'node_discover' })
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success && data.nodes) {
|
||||
displayNodeDiscoveryResults(data.nodes);
|
||||
} else {
|
||||
// Show error
|
||||
document.getElementById('nodeDiscoveryStatus').style.display = 'none';
|
||||
document.getElementById('nodeDiscoveryError').style.display = 'block';
|
||||
document.getElementById('nodeDiscoveryErrorMessage').textContent = data.error || 'Failed to discover nodes';
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error discovering nodes:', error);
|
||||
// Show error
|
||||
document.getElementById('nodeDiscoveryStatus').style.display = 'none';
|
||||
document.getElementById('nodeDiscoveryError').style.display = 'block';
|
||||
document.getElementById('nodeDiscoveryErrorMessage').textContent = 'Network error: ' + error.message;
|
||||
} finally {
|
||||
refreshBtn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display node discovery results in table
|
||||
*/
|
||||
function displayNodeDiscoveryResults(nodes) {
|
||||
const tableBody = document.getElementById('nodeDiscoveryTableBody');
|
||||
|
||||
// Hide loading state
|
||||
document.getElementById('nodeDiscoveryStatus').style.display = 'none';
|
||||
|
||||
// Check if empty
|
||||
if (nodes.length === 0) {
|
||||
document.getElementById('nodeDiscoveryEmpty').style.display = 'block';
|
||||
return;
|
||||
}
|
||||
|
||||
// Show results table
|
||||
document.getElementById('nodeDiscoveryResults').style.display = 'block';
|
||||
|
||||
// Clear previous results
|
||||
tableBody.innerHTML = '';
|
||||
|
||||
// Sort nodes by SNR (descending - strongest signal first)
|
||||
nodes.sort((a, b) => (b.SNR || 0) - (a.SNR || 0));
|
||||
|
||||
// Populate table
|
||||
nodes.forEach(node => {
|
||||
const row = document.createElement('tr');
|
||||
|
||||
// Determine signal quality class
|
||||
let signalClass = '';
|
||||
const snr = node.SNR || 0;
|
||||
if (snr >= 10) {
|
||||
signalClass = 'text-success fw-bold';
|
||||
} else if (snr >= 5) {
|
||||
signalClass = 'text-warning';
|
||||
} else {
|
||||
signalClass = 'text-danger';
|
||||
}
|
||||
|
||||
row.innerHTML = `
|
||||
<td>
|
||||
<span class="font-monospace">${escapeHtml(node.pubkey?.substring(0, 12) || 'unknown')}</span>
|
||||
${node.tag ? `<br><small class="text-muted">Tag: ${escapeHtml(node.tag)}</small>` : ''}
|
||||
</td>
|
||||
<td class="${signalClass}">${snr.toFixed(2)}</td>
|
||||
<td>${node.RSSI !== undefined ? node.RSSI : 'N/A'}</td>
|
||||
<td>${node.SNR_in !== undefined ? node.SNR_in.toFixed(2) : 'N/A'}</td>
|
||||
<td>${node.path_len !== undefined ? node.path_len : 'N/A'}</td>
|
||||
`;
|
||||
|
||||
tableBody.appendChild(row);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// Direct Messages (DM) Functions
|
||||
// =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user