diff --git a/assets/static/js/app.js b/assets/static/js/app.js index dc271f4..4ba39d3 100644 --- a/assets/static/js/app.js +++ b/assets/static/js/app.js @@ -469,40 +469,10 @@ class SkyView { this.radar3d.renderer.render(this.radar3d.scene, this.radar3d.camera); } - updateOpenPopupAges() { - // Find any open aircraft popups and update their age displays - if (!this.aircraftManager) return; - - this.aircraftManager.aircraftMarkers.forEach((marker, icao) => { - if (marker.isPopupOpen()) { - const aircraft = this.aircraftManager.aircraftData.get(icao); - if (aircraft) { - // Refresh the popup content with current age - marker.setPopupContent(this.aircraftManager.createPopupContent(aircraft)); - - // Re-enhance callsign display for the updated popup - const popupElement = marker.getPopup().getElement(); - if (popupElement) { - this.aircraftManager.enhanceCallsignDisplay(popupElement); - } - } - } - }); - } - startPeriodicTasks() { // Update clocks every second setInterval(() => this.uiManager.updateClocks(), 1000); - // Update aircraft ages and refresh displays every second - setInterval(() => { - // Update aircraft table to show current ages - this.uiManager.updateAircraftTable(); - - // Update any open aircraft popups with current ages - this.updateOpenPopupAges(); - }, 1000); - // Update charts every 10 seconds setInterval(() => this.updateCharts(), 10000); diff --git a/assets/static/js/modules/aircraft-manager.js b/assets/static/js/modules/aircraft-manager.js index 81de56d..d2bbfdd 100644 --- a/assets/static/js/modules/aircraft-manager.js +++ b/assets/static/js/modules/aircraft-manager.js @@ -491,7 +491,7 @@ export class AircraftManager { Messages: ${aircraft.TotalMessages || 0}
- Age: ${this.calculateAge(aircraft).toFixed(1)}s + Age: ${aircraft.Age ? aircraft.Age.toFixed(1) : '0'}s
@@ -513,16 +513,6 @@ export class AircraftManager { return minDistance === Infinity ? null : minDistance; } - calculateAge(aircraft) { - if (!aircraft.last_update) return 0; - - const lastUpdate = new Date(aircraft.last_update); - const now = new Date(); - const ageMs = now.getTime() - lastUpdate.getTime(); - - return Math.max(0, ageMs / 1000); // Return age in seconds, minimum 0 - } - // Enhance callsign display in popup after it's created async enhanceCallsignDisplay(popupElement) { if (!this.callsignManager) return; diff --git a/assets/static/js/modules/ui-manager.js b/assets/static/js/modules/ui-manager.js index d72c8e7..b891096 100644 --- a/assets/static/js/modules/ui-manager.js +++ b/assets/static/js/modules/ui-manager.js @@ -129,7 +129,7 @@ export class UIManager { ${aircraft.Track || '-'}° ${sources} ${bestSignal ? bestSignal.toFixed(1) : '-'} - ${this.calculateAge(aircraft).toFixed(0)}s + ${aircraft.Age ? aircraft.Age.toFixed(0) : '0'}s `; row.addEventListener('click', () => { @@ -161,16 +161,6 @@ export class UIManager { return 'commercial'; } - calculateAge(aircraft) { - if (!aircraft.last_update) return 0; - - const lastUpdate = new Date(aircraft.last_update); - const now = new Date(); - const ageMs = now.getTime() - lastUpdate.getTime(); - - return Math.max(0, ageMs / 1000); // Return age in seconds, minimum 0 - } - getBestSignalFromSources(sources) { if (!sources) return null; let bestSignal = -999; diff --git a/internal/merger/merger.go b/internal/merger/merger.go index 0d907ce..dd049f1 100644 --- a/internal/merger/merger.go +++ b/internal/merger/merger.go @@ -202,7 +202,7 @@ func (a *AircraftState) MarshalJSON() ([]byte, error) { SpeedHistory: a.SpeedHistory, Distance: a.Distance, Bearing: a.Bearing, - Age: time.Since(a.LastUpdate).Seconds(), + Age: a.Age, MLATSources: a.MLATSources, PositionSource: a.PositionSource, UpdateRate: a.UpdateRate, diff --git a/internal/merger/merger_test.go b/internal/merger/merger_test.go deleted file mode 100644 index bb1c2e0..0000000 --- a/internal/merger/merger_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package merger - -import ( - "encoding/json" - "testing" - "time" - - "skyview/internal/modes" -) - -func TestAircraftState_MarshalJSON_AgeCalculation(t *testing.T) { - // Create a test aircraft state with a known LastUpdate time - pastTime := time.Now().Add(-30 * time.Second) // 30 seconds ago - - state := &AircraftState{ - Aircraft: &modes.Aircraft{ - ICAO24: 0x123456, - Callsign: "TEST123", - }, - LastUpdate: pastTime, - } - - // Marshal to JSON - jsonData, err := json.Marshal(state) - if err != nil { - t.Fatalf("Failed to marshal AircraftState: %v", err) - } - - // Parse the JSON to check the age field - var result map[string]interface{} - if err := json.Unmarshal(jsonData, &result); err != nil { - t.Fatalf("Failed to unmarshal JSON: %v", err) - } - - // Check that age is not 0 and is approximately 30 seconds - age, ok := result["age"].(float64) - if !ok { - t.Fatal("Age field not found or not a number") - } - - if age < 25 || age > 35 { - t.Errorf("Expected age to be around 30 seconds, got %f", age) - } - - if age == 0 { - t.Error("Age should not be 0 - this indicates the bug is still present") - } - - t.Logf("Aircraft age calculated correctly: %f seconds", age) -} - -func TestAircraftState_MarshalJSON_ZeroAge(t *testing.T) { - // Test with very recent time to ensure age is very small but not exactly 0 - recentTime := time.Now() - - state := &AircraftState{ - Aircraft: &modes.Aircraft{ - ICAO24: 0x123456, - Callsign: "TEST123", - }, - LastUpdate: recentTime, - } - - // Marshal to JSON - jsonData, err := json.Marshal(state) - if err != nil { - t.Fatalf("Failed to marshal AircraftState: %v", err) - } - - // Parse the JSON to check the age field - var result map[string]interface{} - if err := json.Unmarshal(jsonData, &result); err != nil { - t.Fatalf("Failed to unmarshal JSON: %v", err) - } - - // Check that age is very small but should not be exactly 0 (unless extremely fast) - age, ok := result["age"].(float64) - if !ok { - t.Fatal("Age field not found or not a number") - } - - if age < 0 { - t.Errorf("Age should not be negative, got %f", age) - } - - // Age should be very small (less than 1 second) but might not be exactly 0 - if age > 1.0 { - t.Errorf("Age should be very small for recent update, got %f", age) - } - - t.Logf("Recent aircraft age calculated correctly: %f seconds", age) -}