fix: KiwiSDR layer broken import + remove ugly iframe embed

- kiwisdr_fetcher.py imported non-existent `smart_request` (renamed to
  `fetch_with_curl`), causing silent ImportError → 0 nodes returned
- Replaced KiwiSDR iframe embed with clean "OPEN SDR RECEIVER" button.
  The full KiwiSDR web UI (waterfall, frequency controls, callsign
  prompt) is unusable at 288px — better opened in a new tab.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Former-commit-id: aa0fcd92b2390d6a8943b68f2f7eb9b900c7bbb7
This commit is contained in:
anoracleofra-code
2026-03-13 16:32:32 -06:00
parent 3d910cded8
commit 8ee807276c
2 changed files with 17 additions and 17 deletions
+2 -2
View File
@@ -34,10 +34,10 @@ def _parse_gps(html: str):
@cached(kiwisdr_cache)
def fetch_kiwisdr_nodes() -> list[dict]:
"""Fetch and parse the KiwiSDR public receiver list."""
from services.network_utils import smart_request
from services.network_utils import fetch_with_curl
try:
res = smart_request("http://kiwisdr.com/.public/", timeout=20)
res = fetch_with_curl("http://kiwisdr.com/.public/", timeout=20)
if not res or res.status_code != 200:
logger.error(f"KiwiSDR fetch failed: HTTP {res.status_code if res else 'no response'}")
return []
+15 -15
View File
@@ -359,21 +359,21 @@ export default function RadioInterceptPanel({ data, isEavesdropping, setIsEavesd
{selectedEntity.extra.antenna && <span>{selectedEntity.extra.antenna.slice(0, 80)} · </span>}
{selectedEntity.extra.users !== undefined && <span>{selectedEntity.extra.users}/{selectedEntity.extra.users_max} users</span>}
</div>
<iframe
src={selectedEntity.extra.url}
className="w-full h-72 rounded border border-amber-900/50 bg-black"
allow="microphone"
sandbox="allow-scripts allow-same-origin"
title="KiwiSDR Tuner"
/>
<a
href={selectedEntity.extra.url}
target="_blank"
rel="noopener noreferrer"
className="text-[8px] text-amber-500 hover:text-amber-300 font-mono mt-1 inline-block"
>
OPEN IN NEW TAB
</a>
<div className="flex items-center gap-2 mt-1">
<a
href={selectedEntity.extra.url}
target="_blank"
rel="noopener noreferrer"
className="flex-1 text-center px-4 py-2.5 rounded border border-amber-500/50 bg-amber-950/30 text-amber-400 hover:bg-amber-900/40 hover:border-amber-400 text-[10px] font-mono tracking-widest transition-colors"
>
OPEN SDR RECEIVER
</a>
</div>
{selectedEntity.extra.bands && (
<div className="text-[8px] text-[var(--text-muted)] font-mono mt-2">
BANDS: {(Number(selectedEntity.extra.bands.split('-')[0]) / 1e6).toFixed(0)}-{(Number(selectedEntity.extra.bands.split('-')[1]) / 1e6).toFixed(0)} MHz
</div>
)}
</div>
)}