mirror of
https://github.com/smittix/intercept.git
synced 2026-04-24 06:40:00 -07:00
Preserve satellite panes during refresh
This commit is contained in:
@@ -788,6 +788,7 @@
|
|||||||
let _dashboardRetryTimer = null;
|
let _dashboardRetryTimer = null;
|
||||||
let _dashboardRetryAttempts = 0;
|
let _dashboardRetryAttempts = 0;
|
||||||
let _satelliteSelectionRequestToken = 0;
|
let _satelliteSelectionRequestToken = 0;
|
||||||
|
let _lastSatelliteCatalogRefresh = 0;
|
||||||
const passCache = new Map();
|
const passCache = new Map();
|
||||||
const telemetryCache = new Map();
|
const telemetryCache = new Map();
|
||||||
const transmitterCache = new Map();
|
const transmitterCache = new Map();
|
||||||
@@ -1080,7 +1081,7 @@
|
|||||||
updateMissionDrawerInfo();
|
updateMissionDrawerInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadDashboardSatellites() {
|
function loadDashboardSatellites(forceDataRefresh = true) {
|
||||||
const btn = document.getElementById('satRefreshBtn');
|
const btn = document.getElementById('satRefreshBtn');
|
||||||
if (btn) {
|
if (btn) {
|
||||||
btn.classList.remove('spinning');
|
btn.classList.remove('spinning');
|
||||||
@@ -1123,12 +1124,16 @@
|
|||||||
}
|
}
|
||||||
selectedSatellite = parseInt(select.value);
|
selectedSatellite = parseInt(select.value);
|
||||||
_satelliteSelectionRequestToken += 1;
|
_satelliteSelectionRequestToken += 1;
|
||||||
|
_lastSatelliteCatalogRefresh = Date.now();
|
||||||
clearTelemetry();
|
clearTelemetry();
|
||||||
restoreSatelliteStateFromCache(selectedSatellite);
|
restoreSatelliteStateFromCache(selectedSatellite);
|
||||||
updateMissionDrawerInfo();
|
updateMissionDrawerInfo();
|
||||||
loadTransmitters(selectedSatellite, _satelliteSelectionRequestToken);
|
const hasCachedPasses = !!getCachedPasses(selectedSatellite)?.passes?.length;
|
||||||
calculatePasses(selectedSatellite, _satelliteSelectionRequestToken);
|
const hasCachedTelemetry = !!getCachedLivePosition(selectedSatellite)?.position;
|
||||||
fetchCurrentTelemetry(selectedSatellite, _satelliteSelectionRequestToken);
|
const hasCachedTransmitters = !!getCachedTransmitters(selectedSatellite)?.transmitters?.length;
|
||||||
|
if (forceDataRefresh || !hasCachedTransmitters) loadTransmitters(selectedSatellite, _satelliteSelectionRequestToken);
|
||||||
|
if (forceDataRefresh || !hasCachedPasses) calculatePasses(selectedSatellite, _satelliteSelectionRequestToken);
|
||||||
|
if (forceDataRefresh || !hasCachedTelemetry) fetchCurrentTelemetry(selectedSatellite, _satelliteSelectionRequestToken);
|
||||||
if (window.gsLoadOutputs) window.gsLoadOutputs();
|
if (window.gsLoadOutputs) window.gsLoadOutputs();
|
||||||
if (window.gsOnSatelliteChange) window.gsOnSatelliteChange();
|
if (window.gsOnSatelliteChange) window.gsOnSatelliteChange();
|
||||||
if (!trackedSatelliteCatalog.length) {
|
if (!trackedSatelliteCatalog.length) {
|
||||||
@@ -1153,9 +1158,12 @@
|
|||||||
}));
|
}));
|
||||||
renderTrackedSatelliteCatalog();
|
renderTrackedSatelliteCatalog();
|
||||||
}
|
}
|
||||||
calculatePasses(selectedSatellite, _satelliteSelectionRequestToken);
|
const hasCachedPasses = !!getCachedPasses(selectedSatellite)?.passes?.length;
|
||||||
fetchCurrentTelemetry(selectedSatellite, _satelliteSelectionRequestToken);
|
const hasCachedTelemetry = !!getCachedLivePosition(selectedSatellite)?.position;
|
||||||
loadTransmitters(selectedSatellite, _satelliteSelectionRequestToken);
|
const hasCachedTransmitters = !!getCachedTransmitters(selectedSatellite)?.transmitters?.length;
|
||||||
|
if (!hasCachedPasses) calculatePasses(selectedSatellite, _satelliteSelectionRequestToken);
|
||||||
|
if (!hasCachedTelemetry) fetchCurrentTelemetry(selectedSatellite, _satelliteSelectionRequestToken);
|
||||||
|
if (!hasCachedTransmitters) loadTransmitters(selectedSatellite, _satelliteSelectionRequestToken);
|
||||||
scheduleDashboardDataRetry(2500);
|
scheduleDashboardDataRetry(2500);
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
@@ -1619,8 +1627,14 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Refresh satellite list when the window regains focus (e.g. after enabling sats in the sidebar)
|
function refreshSatelliteCatalogOnFocus() {
|
||||||
window.addEventListener('focus', loadDashboardSatellites);
|
if ((Date.now() - _lastSatelliteCatalogRefresh) < 60000) return;
|
||||||
|
loadDashboardSatellites(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh the catalog on focus only occasionally, and do not clobber
|
||||||
|
// working pass/telemetry panes when we already have cached state.
|
||||||
|
window.addEventListener('focus', refreshSatelliteCatalogOnFocus);
|
||||||
window.addEventListener('pagehide', () => {
|
window.addEventListener('pagehide', () => {
|
||||||
if (_telemetryAbortController) {
|
if (_telemetryAbortController) {
|
||||||
_telemetryAbortController.abort();
|
_telemetryAbortController.abort();
|
||||||
@@ -1913,7 +1927,8 @@
|
|||||||
|
|
||||||
const requestId = ++_passRequestId;
|
const requestId = ++_passRequestId;
|
||||||
|
|
||||||
if (container) {
|
const shouldReplacePassPane = !passes.length;
|
||||||
|
if (container && shouldReplacePassPane) {
|
||||||
container.innerHTML = '<div style="text-align:center;color:var(--text-secondary);padding:20px;">Calculating passes...</div>';
|
container.innerHTML = '<div style="text-align:center;color:var(--text-secondary);padding:20px;">Calculating passes...</div>';
|
||||||
}
|
}
|
||||||
if (button) {
|
if (button) {
|
||||||
|
|||||||
Reference in New Issue
Block a user