feat(recording): add safety limits and adaptive headers
This commit is contained in:
@@ -7,6 +7,7 @@ import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import '../modelos/emisora.dart';
|
||||
import '../modelos/preset_ecualizador.dart';
|
||||
@@ -143,6 +144,7 @@ class EstadoRadio extends ChangeNotifier {
|
||||
EstadoGrabacionRadio get estadoGrabacion => grabacion.estado;
|
||||
bool get grabacionActiva => grabacion.estado.activa;
|
||||
String? get directorioGrabacion => grabacion.directorioConfigurado;
|
||||
int get maxBytesGrabacion => grabacion.maxBytes;
|
||||
|
||||
/// Lista principal (home): custom + populares, sin duplicados.
|
||||
List<Emisora> get emisorasInicio {
|
||||
@@ -203,6 +205,12 @@ class EstadoRadio extends ChangeNotifier {
|
||||
if (estado == EstadoReproduccion.error && timer.activo) {
|
||||
unawaited(timer.cancelar());
|
||||
}
|
||||
if ((estado == EstadoReproduccion.detenido ||
|
||||
estado == EstadoReproduccion.pausado ||
|
||||
estado == EstadoReproduccion.error) &&
|
||||
grabacion.estado.activa) {
|
||||
unawaited(grabacion.detener());
|
||||
}
|
||||
notifyListeners();
|
||||
});
|
||||
}
|
||||
@@ -456,6 +464,9 @@ class EstadoRadio extends ChangeNotifier {
|
||||
|
||||
Future<void> reproducir(Emisora emisora) async {
|
||||
final revision = ++_revisionReproduccion;
|
||||
if (grabacion.estado.activa) {
|
||||
await grabacion.detener();
|
||||
}
|
||||
_emisoraSeleccionada = emisora;
|
||||
notifyListeners();
|
||||
try {
|
||||
@@ -496,6 +507,26 @@ class EstadoRadio extends ChangeNotifier {
|
||||
|
||||
Future<void> detenerGrabacion() => grabacion.detener();
|
||||
|
||||
Future<void> detenerReproduccion() async {
|
||||
if (grabacion.estado.activa) {
|
||||
await grabacion.detener();
|
||||
}
|
||||
await audio.detener();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> cambiarMaxBytesGrabacion(int bytes) async {
|
||||
await grabacion.guardarMaxBytes(bytes);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<bool> abrirDirectorioGrabacion() async {
|
||||
final ruta = await directorioGrabacionEfectivo();
|
||||
await Directory(ruta).create(recursive: true);
|
||||
final uri = Uri.directory(ruta);
|
||||
return launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
}
|
||||
|
||||
Future<void> cambiarDirectorioGrabacion(String path) async {
|
||||
await grabacion.guardarDirectorio(path);
|
||||
notifyListeners();
|
||||
@@ -510,6 +541,9 @@ class EstadoRadio extends ChangeNotifier {
|
||||
grabacion.directorioEfectivo();
|
||||
|
||||
Future<void> togglePlay() async {
|
||||
if (audio.estaSonando && grabacion.estado.activa) {
|
||||
await grabacion.detener();
|
||||
}
|
||||
await audio.togglePlay();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user