feat(alarm): complete musical alarm flows
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import '../modelos/alarma_musical.dart';
|
||||
@@ -21,12 +23,15 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
|
||||
List<AlarmaMusical> _alarmas = [];
|
||||
List<RangoVacaciones> _vacaciones = [];
|
||||
List<ExcepcionAlarma> _excepciones = [];
|
||||
DiagnosticoAlarmasAndroid? _diagnostico;
|
||||
Timer? _refresco;
|
||||
bool _cargando = false;
|
||||
String? _error;
|
||||
|
||||
List<AlarmaMusical> get alarmas => List.unmodifiable(_alarmas);
|
||||
List<RangoVacaciones> get vacaciones => List.unmodifiable(_vacaciones);
|
||||
List<ExcepcionAlarma> get excepciones => List.unmodifiable(_excepciones);
|
||||
DiagnosticoAlarmasAndroid? get diagnostico => _diagnostico;
|
||||
bool get cargando => _cargando;
|
||||
String? get error => _error;
|
||||
@@ -47,6 +52,7 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
_aplicar(config);
|
||||
await _sincronizarTodas();
|
||||
await cargarDiagnostico();
|
||||
_activarRefresco();
|
||||
} catch (e) {
|
||||
_error = 'No se pudieron cargar las alarmas: $e';
|
||||
} finally {
|
||||
@@ -62,6 +68,13 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> refrescarProgramacion() async {
|
||||
final config = await servicio.recalcularTodas();
|
||||
_aplicar(config);
|
||||
await _sincronizarTodas();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> eliminarAlarma(String id) async {
|
||||
final config = await servicio.eliminarAlarma(id);
|
||||
_aplicar(config);
|
||||
@@ -96,6 +109,32 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> posponerAlarma(AlarmaMusical alarma, int minutos) async {
|
||||
final proxima = DateTime.now().add(Duration(minutes: minutos));
|
||||
await android.programar(alarma.copyWith(proximaEjecucion: proxima));
|
||||
}
|
||||
|
||||
Future<void> finalizarEjecucion(String alarmaId) async {
|
||||
await refrescarProgramacion();
|
||||
}
|
||||
|
||||
Future<void> crearRangoVacaciones(RangoVacaciones rango) async {
|
||||
final nuevos = [..._vacaciones, rango];
|
||||
await guardarVacaciones(nuevos);
|
||||
}
|
||||
|
||||
Future<void> eliminarRangoVacaciones(String id) async {
|
||||
final nuevos = _vacaciones.where((v) => v.id != id).toList();
|
||||
await guardarVacaciones(nuevos);
|
||||
}
|
||||
|
||||
ExcepcionAlarma? ultimaExcepcionPara(String alarmaId) {
|
||||
final candidatas =
|
||||
_excepciones.where((e) => e.alarmaId == alarmaId).toList()
|
||||
..sort((a, b) => b.ejecucion.compareTo(a.ejecucion));
|
||||
return candidatas.isEmpty ? null : candidatas.first;
|
||||
}
|
||||
|
||||
Future<void> cargarDiagnostico() async {
|
||||
try {
|
||||
_diagnostico = await android.diagnostico();
|
||||
@@ -114,5 +153,19 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
void _aplicar(ConfiguracionAlarmas config) {
|
||||
_alarmas = config.alarmas;
|
||||
_vacaciones = config.vacaciones;
|
||||
_excepciones = config.excepciones;
|
||||
}
|
||||
|
||||
void _activarRefresco() {
|
||||
_refresco?.cancel();
|
||||
_refresco = Timer.periodic(const Duration(minutes: 1), (_) {
|
||||
refrescarProgramacion();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refresco?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user