@sailingrotevista/rotevista-dash 6.0.6 → 6.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/app.js +41 -30
  2. package/package.json +1 -1
package/app.js CHANGED
@@ -1317,13 +1317,26 @@ function connect() {
1317
1317
  let addr = window.location.host || CONFIG.server.fallbackIp;
1318
1318
  try {
1319
1319
  socket = new WebSocket(`ws://${addr}/signalk/v1/stream?subscribe=self`);
1320
- socket.onopen = () => { ui.status.className = "online"; ui.status.innerText = "ONLINE"; reconnectDelay = 1000; };
1320
+
1321
+ socket.onopen = async () => {
1322
+ ui.status.className = "online";
1323
+ ui.status.innerText = "ONLINE";
1324
+ reconnectDelay = 1000;
1325
+
1326
+ // SINCRONIZZAZIONE AUTOMATICA: Ogni volta che la connessione si apre o si riapre,
1327
+ // scarichiamo lo storico fresco dal server e ridisegnamo i grafici
1328
+ try {
1329
+ await fetchServerHistory();
1330
+ ['stw', 'sog', 'depth', 'tws'].forEach(refreshGraph);
1331
+ } catch (err) {
1332
+ console.warn("⚠️ Sincronizzazione storico fallita alla connessione:", err);
1333
+ }
1334
+ };
1321
1335
 
1322
1336
  socket.onmessage = (e) => {
1323
1337
  const d = JSON.parse(e.data);
1324
1338
  if (d.updates) {
1325
1339
  d.updates.forEach(u => {
1326
- // ESTRAZIONE AVANZATA DELLA SORGENTE (Gestisce $source e stringhe native)
1327
1340
  let sourceLabel = "Unknown";
1328
1341
  if (u.$source) {
1329
1342
  sourceLabel = u.$source;
@@ -1342,8 +1355,17 @@ function connect() {
1342
1355
  }
1343
1356
  };
1344
1357
 
1345
- socket.onclose = () => { if (!simulationMode) { ui.status.className = "offline"; ui.status.innerText = "RECONNECTING..."; setTimeout(connect, reconnectDelay); reconnectDelay = Math.min(reconnectDelay * 1.5, 10000); } };
1346
- } catch (e) { setTimeout(connect, reconnectDelay); }
1358
+ socket.onclose = () => {
1359
+ if (!simulationMode) {
1360
+ ui.status.className = "offline";
1361
+ ui.status.innerText = "RECONNECTING...";
1362
+ setTimeout(connect, reconnectDelay);
1363
+ reconnectDelay = Math.min(reconnectDelay * 1.5, 10000);
1364
+ }
1365
+ };
1366
+ } catch (e) {
1367
+ setTimeout(connect, reconnectDelay);
1368
+ }
1347
1369
  }
1348
1370
 
1349
1371
  // ==========================================================================
@@ -1366,46 +1388,35 @@ window.addEventListener('contextmenu', e => e.preventDefault(), true);
1366
1388
  async function init() {
1367
1389
  loadDashboardState();
1368
1390
 
1369
- // Prova a caricare lo storico reale dal Cerbo GX tramite l'API deviata
1370
- try {
1371
- await fetchServerHistory();
1372
- } catch (err) {
1373
- console.warn("⚠️ Impossibile caricare lo storico dal server.");
1374
- }
1375
-
1391
+ // Proviamo un primo caricamento configurazioni
1376
1392
  await fetchServerConfig();
1377
1393
  startDisplayLoop();
1378
- connect(); // Si collegherà in tempo reale al WebSocket del Cerbo (usando l'IP di fallback se sei su Mac)
1394
+ connect();
1379
1395
 
1380
1396
  setInterval(watchConfigChanges, 10000);
1381
1397
 
1382
1398
  // ==========================================================================
1383
- // WATCHDOG DI RISVEGLIO (SLEEP/WAKE DETECTOR)
1399
+ // RICONNESSIONE RAPIDA AL RISVEGLIO (VISIBILITY WATCHDOG)
1384
1400
  // ==========================================================================
1385
1401
 
1386
- // Rileva quando la scheda del browser torna in primo piano (es. sblocco iPad o Mac aperto)
1402
+ // Quando sblocchi l'iPad o riapri il browser, forziamo la chiusura del vecchio
1403
+ // WebSocket orfano. Questo farà scattare immediatamente connect() e la sincronizzazione.
1387
1404
  document.addEventListener('visibilitychange', () => {
1388
1405
  if (document.visibilityState === 'visible') {
1389
- handleWakeUp();
1406
+ console.log("⏰ Schermo sbloccato: forzatura riconnessione rapida.");
1407
+ if (socket) {
1408
+ try {
1409
+ socket.close(); // Fa scattare onclose -> connect() -> onopen -> fetchServerHistory()
1410
+ } catch (e) {
1411
+ connect();
1412
+ }
1413
+ } else {
1414
+ connect();
1415
+ }
1390
1416
  }
1391
1417
  });
1392
-
1393
- // Rileva se il computer è andato in sospensione misurando il ritardo dei secondi
1394
- let lastHeartbeat = Date.now();
1395
- setInterval(() => {
1396
- const now = Date.now();
1397
- const diff = now - lastHeartbeat;
1398
- lastHeartbeat = now;
1399
-
1400
- // Se passano più di 6 secondi tra un ciclo e l'altro (invece di 1 secondo),
1401
- // significa che il PC era in sospensione. Avviamo il risveglio.
1402
- if (diff > 6000) {
1403
- handleWakeUp();
1404
- }
1405
- }, 1000);
1406
1418
  }
1407
1419
 
1408
1420
 
1409
-
1410
1421
  window.addEventListener('load', init);
1411
1422
  window.addEventListener('pagehide', saveDashboardState);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sailingrotevista/rotevista-dash",
3
- "version": "6.0.6",
3
+ "version": "6.0.7",
4
4
  "description": "Wind Dashboard with navigation and course aids",
5
5
  "main": "index.js",
6
6
  "publishConfig": {