From e9fdadbbd8a501eb6baa0790b4e7718162d596c7 Mon Sep 17 00:00:00 2001 From: Smittix Date: Mon, 16 Mar 2026 15:00:35 +0000 Subject: [PATCH] Fix APRS observer location not updating after settings change Dispatch observer-location-changed event from settings manager and listen for it in APRS mode so manual location saves propagate to the map and distance calculations. Also refresh ObserverLocation in initAprsMap() to catch changes between page load and first map use. Co-Authored-By: Claude Opus 4.6 --- static/js/core/settings-manager.js | 8 ++++++++ templates/index.html | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/static/js/core/settings-manager.js b/static/js/core/settings-manager.js index 1841a3f..42d22d7 100644 --- a/static/js/core/settings-manager.js +++ b/static/js/core/settings-manager.js @@ -1090,6 +1090,14 @@ async function saveObserverLocation() { SSTV.loadIssSchedule(); } + // Update APRS user location if function is available + if (typeof updateAprsUserLocation === 'function') { + updateAprsUserLocation({ latitude: lat, longitude: lon }); + } + + // Notify all listeners (any mode can subscribe) + window.dispatchEvent(new CustomEvent('observer-location-changed', { detail: { lat, lon } })); + if (typeof showNotification === 'function') { showNotification('Location', notificationMessage); } diff --git a/templates/index.html b/templates/index.html index 56ca5be..cd58792 100644 --- a/templates/index.html +++ b/templates/index.html @@ -9875,6 +9875,14 @@ aprsUserLocation.lon = lon; } })(); + + // Listen for observer location changes from settings or other sources + window.addEventListener('observer-location-changed', function(e) { + if (e.detail && aprsHasValidCoordinates(e.detail.lat, e.detail.lon)) { + updateAprsUserLocation({ latitude: e.detail.lat, longitude: e.detail.lon }); + } + }); + let aprsUserMarker = null; // Calculate distance in miles using Haversine formula @@ -9992,6 +10000,18 @@ const mapContainer = document.getElementById('aprsMap'); if (!mapContainer) return; + // Refresh from ObserverLocation in case it changed since page load + if (!aprsHasValidCoordinates(aprsUserLocation.lat, aprsUserLocation.lon) || + (aprsUserLocation.lat === 0 && aprsUserLocation.lon === 0)) { + if (typeof ObserverLocation !== 'undefined' && ObserverLocation.getShared) { + const shared = ObserverLocation.getShared(); + if (shared && aprsHasValidCoordinates(shared.lat, shared.lon)) { + aprsUserLocation.lat = shared.lat; + aprsUserLocation.lon = shared.lon; + } + } + } + // Use GPS location if available, otherwise default to center of US const gpsLat = Number(gpsLastPosition && gpsLastPosition.latitude); const gpsLon = Number(gpsLastPosition && gpsLastPosition.longitude);