From 32d598335a2606f920ac5f49c3d0fb34689b4ffe 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);