diff --git a/html/early.js b/html/early.js index 3d3f928..6dcd628 100644 --- a/html/early.js +++ b/html/early.js @@ -548,6 +548,8 @@ if (uuid != null) { function get_history() { if (nHistoryItems > 0) { + console.time("Downloaded History"); + nHistoryItems++; let request = jQuery.ajax({ url: 'data/aircraft.json', timeout: historyTimeout*800, @@ -562,22 +564,17 @@ function get_history() { dataType: 'json' }); deferHistory.push(request); } - } - if (HistoryChunks) { - if (nHistoryItems > 0) { - console.log("Starting to load history (" + nHistoryItems + " chunks)"); - console.time("Downloaded History"); + if (HistoryChunks) { + //console.log("Starting to load history (" + nHistoryItems + " chunks)"); for (let i = chunkNames.length-1; i >= 0; i--) { get_history_item(i); } - } - } else if (nHistoryItems > 0) { - console.log("Starting to load history (" + nHistoryItems + " items)"); - console.time("Downloaded History"); - // Queue up the history file downloads - for (let i = nHistoryItems-1; i >= 0; i--) { - get_history_item(i); + } else { + //console.log("Starting to load history (" + nHistoryItems + " items)"); + for (let i = nHistoryItems-1; i >= 0; i--) { + get_history_item(i); + } } } } diff --git a/html/script.js b/html/script.js index a379c94..6d4fe66 100644 --- a/html/script.js +++ b/html/script.js @@ -306,7 +306,7 @@ function processReceiverUpdate(data, init) { return; } if (data.now > now) { - if (now && data.now - now > 10 * 1000) { + if (now && data.now - now > 10) { console.log('now jumped: ' + localTime(new Date(now * 1000)) + ' -> ' + localTime(new Date(data.now * 1000))); console.trace(); } @@ -401,6 +401,11 @@ function fetchDone(data) { return; } + if (!timersActive) { + console.log(localTime(new Date()) + " fetchDone: not applying data due to !timersActive"); + return; + } + //console.time("Process " + data.globeIndex); processReceiverUpdate(data); //console.timeEnd("Process " + data.globeIndex); @@ -513,6 +518,10 @@ let C429 = 0; let fetchCalls = 0; function fetchData(options) { options = options || {}; + if (!timersActive) { + console.log(localTime(new Date()) + " fetchData inhibited by !timersActive"); + return; + } if (heatmap || replay || showTrace || pTracks || !loadFinished || inhibitFetch) { return; } @@ -1780,6 +1789,9 @@ function push_history_item(i) { if (HistoryItemsReturned == nHistoryItems) { parseHistory(); } + if (HistoryItemsReturned > nHistoryItems) { + console.log(localTime(new Date()) + " WARNING: (HistoryItemsReturned > nHistoryItems)"); + } }) .fail(function(jqxhr, status, error) { @@ -1806,7 +1818,7 @@ function parseHistory() { if (PositionHistoryBuffer.length > 0) { // Sort history by timestamp - console.log("Sorting history: " + PositionHistoryBuffer.length); + console.log(localTime(new Date()) + " Sorting history: " + PositionHistoryBuffer.length); PositionHistoryBuffer.sort(function(x,y) { return (y.now - x.now); }); // Process history @@ -1814,8 +1826,15 @@ function parseHistory() { let h = 0; let pruneInt = Math.floor(PositionHistoryBuffer.length/5); let currentTime = new Date().getTime()/1000; + let lastTimestamp = 0; + while (data = PositionHistoryBuffer.pop()) { + if (data.now < lastTimestamp) { + console.log('parseHistory sorting issue'); + } + lastTimestamp = data.now; + if (pTracks && currentTime - data.now > pTracks * 3600) { continue; } @@ -1831,23 +1850,20 @@ function parseHistory() { processReceiverUpdate(data, true); } - if (h==0) { - console.log("Applied history " + h + " from: " - + localTime(new Date(now * 1000))); - } + if (++h % pruneInt == 1 || PositionHistoryBuffer.length == 0) { - // prune aircraft list - if (h++ % pruneInt == pruneInt - 1) { - - console.log("Applied history " + h + " from: " + console.log("Apply History " + String(h).padStart(4) + " from: " + localTime(new Date(now * 1000))); - reaper(); + if (h != 0) { + // prune aircraft list + reaper(); + } } } // Final pass to update all planes to their latest state - console.log("Final history cleanup pass"); + //console.log("Final history cleanup pass"); for (let i in g.planesOrdered) { let plane = g.planesOrdered[i]; @@ -1882,19 +1898,22 @@ let replay_was_active = false; let timers = {}; let timersActive = false; function clearIntervalTimers(arg) { - timersActive = false; + if (!timersActive) { + console.trace(); + return; + } if (loadFinished && arg != 'silent') { + console.log(localTime(new Date()) + ' clear timers'); jQuery("#timers_paused_detail").text('Timers paused (tab hidden).'); jQuery("#timers_paused").css('display','block'); - } - console.log(localTime(new Date()) + ': clear timers'); const entries = Object.entries(timers); for (let i in entries) { clearInterval(entries[i][1]); } + timersActive = false; } function setIntervalTimers() { @@ -1902,12 +1921,10 @@ function setIntervalTimers() { return; } - timersActive = true; - if (loadFinished) { jQuery("#timers_paused").css('display','none'); } - console.log(localTime(new Date()) + ": set timers "); + console.log(localTime(new Date()) + " set timers "); if ((adsbexchange || dynGlobeRate) && !uuid) { timers.globeRateUpdate = setInterval(globeRateUpdate, 180000); } @@ -1949,6 +1966,9 @@ function setIntervalTimers() { timers.aiscatcher = setInterval(updateAIScatcher, aiscatcher_refresh * 1000); updateAIScatcher(); } + + timersActive = true; + fetchData(); } let djson; @@ -2002,10 +2022,6 @@ function startPage() { loadFinished = true; - // Kick off first refresh. - fetchData(); - - clearIntervalTimers(); setIntervalTimers(); if (tempTrails) @@ -7893,7 +7909,7 @@ function refreshHistory() { return; } chunksDefer().done(function(data) { - console.log(localTime(new Date()) + ': tab change, loading history'); + console.log(localTime(new Date()) + ' tab change, loading history'); g.refreshHistory = true; HistoryChunks = true; chunkNames = []; @@ -7914,6 +7930,7 @@ function refreshHistory() { } } } + //console.log(chunkNames); nHistoryItems = chunkNames.length; get_history(); push_history(); @@ -7958,13 +7975,11 @@ function handleVisibilityChange() { function noLongerHidden() { - clearIntervalTimers(); - setIntervalTimers(); - active(); + setIntervalTimers(); + refresh(); - fetchData(); if (replay_was_active) { playReplay(true);