mirror of
https://github.com/smittix/intercept.git
synced 2026-05-27 02:04:45 -07:00
feat(adsb): add IATA↔ICAO airline code translation for ACARS cross-linking
ACARS messages use IATA codes (e.g. UA2412) while ADS-B uses ICAO callsigns (e.g. UAL2412). Add a translation layer so the two can match, enabling click-to-highlight and datalink message correlation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,8 @@ from __future__ import annotations
|
||||
import time
|
||||
from collections import deque
|
||||
|
||||
from utils.airline_codes import expand_search_terms, translate_flight
|
||||
|
||||
|
||||
class FlightCorrelator:
|
||||
"""Correlate ACARS and VDL2 messages with ADS-B aircraft."""
|
||||
@@ -26,7 +28,10 @@ class FlightCorrelator:
|
||||
})
|
||||
|
||||
def get_messages_for_aircraft(
|
||||
self, icao: str | None = None, callsign: str | None = None
|
||||
self,
|
||||
icao: str | None = None,
|
||||
callsign: str | None = None,
|
||||
registration: str | None = None,
|
||||
) -> dict[str, list[dict]]:
|
||||
"""Match ACARS/VDL2 messages by callsign, flight, or registration fields."""
|
||||
if not icao and not callsign:
|
||||
@@ -37,6 +42,11 @@ class FlightCorrelator:
|
||||
search_terms.add(callsign.strip().upper())
|
||||
if icao:
|
||||
search_terms.add(icao.strip().upper())
|
||||
if registration:
|
||||
search_terms.add(registration.strip().upper())
|
||||
|
||||
# Expand with IATA↔ICAO airline code translations
|
||||
search_terms = expand_search_terms(search_terms)
|
||||
|
||||
acars = []
|
||||
for msg in self._acars_messages:
|
||||
@@ -55,8 +65,15 @@ class FlightCorrelator:
|
||||
"""Check if any identifying field in msg matches the search terms."""
|
||||
for field in ('flight', 'tail', 'reg', 'callsign', 'icao', 'addr'):
|
||||
val = msg.get(field)
|
||||
if val and str(val).strip().upper() in terms:
|
||||
if not val:
|
||||
continue
|
||||
upper_val = str(val).strip().upper()
|
||||
if upper_val in terms:
|
||||
return True
|
||||
# Also try translating the message field value
|
||||
for translated in translate_flight(upper_val):
|
||||
if translated in terms:
|
||||
return True
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user