diff --git a/meshview/templates/map.html b/meshview/templates/map.html
index 130a75d..3ff2ec4 100644
--- a/meshview/templates/map.html
+++ b/meshview/templates/map.html
@@ -251,7 +251,7 @@ var lastFetchTime = null;
const activeBlinks = new Map();
function fetchLatestPacket() {
- fetch(`/api/packets?limit=1&since=1970-01-01T00:00:00Z`)
+ fetch(`/api/packets?limit=1`)
.then(res => res.json())
.then(data => {
if (data.packets && data.packets.length > 0) lastFetchTime = data.packets[0].import_time;
@@ -286,7 +286,7 @@ function blinkNode(marker, longName, portnum) {
let interval = setInterval(() => {
if (isMarkerVisible(marker)) {
marker.setStyle({ fillColor: blinkCount % 2 === 0 ? 'yellow' : marker.originalColor });
- marker.bringToFront(); // <-- ensures blinking node stays on top
+ marker.bringToFront(); // <-- keeps blinking node on top
}
blinkCount++;
if (blinkCount > 7) {
@@ -302,7 +302,7 @@ function blinkNode(marker, longName, portnum) {
function fetchNewPackets() {
if (!lastFetchTime) return;
- fetch(`/api/packets?since=${lastFetchTime}`)
+ fetch(`/api/packets?limit=5&since=${lastFetchTime}`)
.then(res => res.json())
.then(data => {
if (!data.packets || data.packets.length === 0) return;
@@ -321,8 +321,35 @@ function fetchNewPackets() {
.catch(err => console.error("Error fetching packets:", err));
}
+// --- Visibility-based polling control ---
+let packetInterval = null;
+
+function startPacketFetcher() {
+ if (!packetInterval) {
+ packetInterval = setInterval(fetchNewPackets, 1000);
+ console.log("Packet fetching started");
+ }
+}
+
+function stopPacketFetcher() {
+ if (packetInterval) {
+ clearInterval(packetInterval);
+ packetInterval = null;
+ console.log("Packet fetching stopped");
+ }
+}
+
+document.addEventListener("visibilitychange", function() {
+ if (document.hidden) {
+ stopPacketFetcher();
+ } else {
+ startPacketFetcher();
+ }
+});
+
+// Init
fetchLatestPacket();
-setInterval(fetchNewPackets, 1000);
+startPacketFetcher();
{% endblock %}