fix(alarm): add due alarm watchdog
This commit is contained in:
@@ -26,6 +26,9 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
List<ExcepcionAlarma> _excepciones = [];
|
||||
DiagnosticoAlarmasAndroid? _diagnostico;
|
||||
Timer? _refresco;
|
||||
Timer? _vigilancia;
|
||||
final _alarmasVencidasController = StreamController<AlarmaMusical>.broadcast();
|
||||
final Set<String> _ejecucionesEmitidas = {};
|
||||
bool _cargando = false;
|
||||
String? _error;
|
||||
|
||||
@@ -35,6 +38,8 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
DiagnosticoAlarmasAndroid? get diagnostico => _diagnostico;
|
||||
bool get cargando => _cargando;
|
||||
String? get error => _error;
|
||||
Stream<AlarmaMusical> get alarmasVencidasStream =>
|
||||
_alarmasVencidasController.stream;
|
||||
|
||||
AlarmaMusical? get proximaAlarma {
|
||||
final candidatas =
|
||||
@@ -168,11 +173,31 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
_refresco = Timer.periodic(const Duration(minutes: 1), (_) {
|
||||
refrescarProgramacion();
|
||||
});
|
||||
_vigilarAlarmasVencidas();
|
||||
_vigilancia?.cancel();
|
||||
_vigilancia = Timer.periodic(const Duration(seconds: 10), (_) {
|
||||
_vigilarAlarmasVencidas();
|
||||
});
|
||||
}
|
||||
|
||||
void _vigilarAlarmasVencidas() {
|
||||
final ahora = DateTime.now();
|
||||
for (final alarma in _alarmas) {
|
||||
final proxima = alarma.proximaEjecucion;
|
||||
if (!alarma.activa || proxima == null) continue;
|
||||
if (proxima.isAfter(ahora)) continue;
|
||||
final key = '${alarma.id}:${proxima.millisecondsSinceEpoch}';
|
||||
if (_ejecucionesEmitidas.add(key)) {
|
||||
_alarmasVencidasController.add(alarma);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refresco?.cancel();
|
||||
_vigilancia?.cancel();
|
||||
_alarmasVencidasController.close();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user