From 26078ad49b81f47a96df0fb45dfc4b0644ed4b50 Mon Sep 17 00:00:00 2001 From: freetlab Date: Fri, 22 May 2026 19:32:58 +0200 Subject: [PATCH] fix(alarms): skip stale startup executions --- lib/estado/estado_alarmas.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/estado/estado_alarmas.dart b/lib/estado/estado_alarmas.dart index b6e93fb..02bdc5c 100644 --- a/lib/estado/estado_alarmas.dart +++ b/lib/estado/estado_alarmas.dart @@ -29,6 +29,7 @@ class EstadoAlarmas extends ChangeNotifier { Timer? _vigilancia; final _alarmasVencidasController = StreamController.broadcast(); final Set _ejecucionesEmitidas = {}; + static const _margenDisparoLocal = Duration(seconds: 45); bool _cargando = false; String? _error; @@ -54,7 +55,7 @@ class EstadoAlarmas extends ChangeNotifier { _error = null; notifyListeners(); try { - final config = await servicio.cargar(); + final config = await servicio.recalcularTodas(); _aplicar(config); debugPrint('[PluriWave][alarmas] cargadas=${_alarmas.length} vacaciones=${_vacaciones.length} excepciones=${_excepciones.length}'); await _sincronizarTodas(); @@ -204,6 +205,14 @@ class EstadoAlarmas extends ChangeNotifier { if (!alarma.activa || proxima == null) continue; if (proxima.isAfter(ahora)) continue; final key = '${alarma.id}:${proxima.millisecondsSinceEpoch}'; + final retraso = ahora.difference(proxima); + if (retraso > _margenDisparoLocal) { + _ejecucionesEmitidas.add(key); + debugPrint( + '[PluriWave][alarmas] vencida local ignorada por antigua id=${alarma.id} proxima=${proxima.toIso8601String()} retraso=${retraso.inSeconds}s', + ); + continue; + } if (_ejecucionesEmitidas.add(key)) { debugPrint('[PluriWave][alarmas] vencida local id=${alarma.id} proxima=${proxima.toIso8601String()}'); _alarmasVencidasController.add(alarma);