feat(pm): live ATIS broadcast loop with METAR-slot refresh and multi-station support

- per-airport ATIS loop keyed by station with a virtual start epoch, so
  re-tuning resumes where the broadcast would be instead of restarting
- refetch airport data at :23/:53 to follow VATSIM ATIS regeneration from
  real-world METAR publication, with faster retries while no ATIS is on
  the feed; prefetch audio when the info letter changes
- support separate arrival/departure ATIS stations on different frequencies
- cancel the deferred audio teardown on retune so a fresh broadcast is not
  killed by the previous stop()'s fade-out timer (atisAudioLoop)
- comm log shows newest entries first

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
leubeem
2026-06-10 23:10:35 +02:00
parent 20b88ca74d
commit ca86abf799
3 changed files with 393 additions and 90 deletions

View File

@@ -42,8 +42,9 @@ const formatTime = (date: Date): string => {
</div>
<div class="space-y-2 overflow-y-auto" :class="dense ? 'max-h-[70vh]' : 'max-h-64'">
<!-- Newest first: the latest exchange is always visible without scrolling. -->
<div
v-for="entry in entries.slice(-limit)"
v-for="entry in entries.slice(-limit).reverse()"
:key="entry.timestamp.getTime?.() ?? entry.timestamp"
class="rounded-2xl border border-white/10 bg-black/40 p-3"
>