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);