From 29a193cc87897553e10a48bb2d23a435c54ccea3 Mon Sep 17 00:00:00 2001 From: redraw Date: Sat, 11 Apr 2026 12:10:19 -0300 Subject: [PATCH 1/2] feat: ui updates --- dump1090.c | 5 +- gmap.html | 1101 ++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 951 insertions(+), 155 deletions(-) diff --git a/dump1090.c b/dump1090.c index d080470c3..7295f6acb 100644 --- a/dump1090.c +++ b/dump1090.c @@ -2507,6 +2507,7 @@ char *aircraftsToJson(int *len) { int buflen = 1024; /* The initial buffer is incremented as needed. */ char *buf = malloc(buflen), *p = buf; int l; + time_t now = time(NULL); l = snprintf(p,buflen,"[\n"); p += l; buflen -= l; @@ -2523,9 +2524,9 @@ char *aircraftsToJson(int *len) { l = snprintf(p,buflen, "{\"hex\":\"%s\", \"flight\":\"%s\", \"lat\":%f, " "\"lon\":%f, \"altitude\":%d, \"track\":%d, " - "\"speed\":%d},\n", + "\"speed\":%d, \"messages\":%ld, \"seen\":%d},\n", a->hexaddr, a->flight, a->lat, a->lon, altitude, a->track, - speed); + speed, a->messages, (int)(now - a->seen)); p += l; buflen -= l; /* Resize if needed. */ if (buflen < 256) { diff --git a/gmap.html b/gmap.html index ad6c30ac5..22fabac18 100644 --- a/gmap.html +++ b/gmap.html @@ -4,159 +4,537 @@ - Dump1090 + DUMP1090 // ATC MONITOR + + + - -
+ +
+
+ DUMP1090  ·  ATC MONITOR +
+
+
+ ◉ LIVE +
+
1090 MHz
+
+
+
+ ◎ NOTIFY +
+
+ FT / KT +
+
+ UTC + --:--:-- +
+
+
+ + +
-

Dump1090

+

▸ CONTACT

+ 00 TRACKED
+
-

-

Click on a plane for info

+

No target selected

@@ -164,52 +542,455 @@

Dump1090

integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""> - \ No newline at end of file + From 815bf1367a86ffc96ff11118fe91f2db217a6c77 Mon Sep 17 00:00:00 2001 From: redraw Date: Sat, 11 Apr 2026 16:42:00 -0300 Subject: [PATCH 2/2] fix: show error if not connected --- gmap.html | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gmap.html b/gmap.html index 22fabac18..181be17bf 100644 --- a/gmap.html +++ b/gmap.html @@ -101,6 +101,10 @@ animation: blink 1.6s ease-in-out infinite; } + .header__dot--error { + background: #e05050; + } + @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.08; } @@ -1067,9 +1071,14 @@

▸ CONTACT

// ─── FETCH DATA ─────────────────────────────────────────────── const fetchData = async () => { + const dot = document.querySelector('.header__dot'); try { const response = await fetch('/data.json'); - if (!response.ok) return; + if (!response.ok) { + dot.classList.add('header__dot--error'); + return; + } + dot.classList.remove('header__dot--error'); const data = await response.json(); const activePlanes = {}; @@ -1134,6 +1143,7 @@

▸ CONTACT

} } } catch (error) { + dot.classList.add('header__dot--error'); console.error('Error fetching data:', error); } };