- ServicioAudio: delega a PluriWaveAudioHandler (audio_service) para mantener audio vivo en background. AudioService.init() en main.dart. onTaskRemoved() libera player. mediaItem con nombre/artista/artwork. - ServicioRadio: lastcheckok=1 en todas las peticiones — solo emisoras verificadas como funcionales por Radio Browser API. - EstadoRadio: errorStream (broadcast) para errores de reproducción y búsqueda. App.dart suscribe y muestra SnackBar flotante 3s. Los errores de carga de lista siguen como banner inline. - Icono: generado con SDXL (morado, ondas radio blancas, Material You). 5 densidades Android (48-192px), ic_launcher_round añadido.
3.3 KiB
3.3 KiB
Changelog — PluriWave
[0.3.0] — 2026-04-04
Fixes (prioridad alta — petición WhikY)
- Audio en background —
ServicioAudiorefactorizado para delegar toda la reproducción aPluriWaveAudioHandler(audio_service). La notificación foreground de Android mantiene el audio vivo al apagar pantalla. Handler inicializado enmain.dartconAudioService.init()y registrado globalmente.onTaskRemovedlibera recursos al cerrar la app.mediaItempropagado con nombre, artista y artwork de la emisora. - Filtrar emisoras rotas —
ServicioRadioañadelastcheckok=1en todas las peticiones a la API. Solo se devuelven emisoras verificadas como funcionales por Radio Browser. - Errores como SnackBar —
EstadoRadioemite errores de reproducción y búsqueda porerrorStream(StreamController broadcast)._PaginaPrincipalState.didChangeDependenciessuscribe al stream y muestraSnackBarflotante de 3 segundos. Los errores de carga de lista siguen como banner inline (no bloquean la UI). - Icono de app — Generado con Stable Diffusion XL: diseño morado, ondas de radio blancas, estilo Material You. Todos los tamaños Android generados (mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi, 48-192px).
ic_launcher_roundañadido.android:roundIconen AndroidManifest.
Ficheros modificados
| Fichero | Cambio |
|---|---|
lib/main.dart |
AudioService.init() + registrarHandler() |
lib/servicios/servicio_audio.dart |
Arquitectura background completa |
lib/servicios/servicio_radio.dart |
lastcheckok=1 en todas las peticiones |
lib/estado/estado_radio.dart |
errorStream en lugar de campo _error |
lib/app.dart |
Listener errorStream → SnackBar + theme SnackBar |
android/app/src/main/AndroidManifest.xml |
roundIcon |
android/app/src/main/res/mipmap-*/ |
Iconos generados (5 densidades) |
[0.2.0] — 2026-04-04
Añadido
- CI/CD Gitea Actions — workflow
.gitea/workflows/ci.ymlpara el runnermacmini-flutter. Jobs en secuencia:flutter pub get→flutter test→flutter build apk --release→flutter build appbundle --release. APK y AAB subidos como artifacts con el SHA del commit en el nombre (pluriwave-apk-<sha>,pluriwave-aab-<sha>). Notificación Telegram al finalizar: ✅ éxito con commit y rama, ❌ fallo con enlace al log. Activado en push amainy PRs contramain. ARQ-REVISION-F1.md— revisión de arquitectura del stack Flutter. Veredicto: aprobado. Sin conflictos de dependencias (audio_sessioncompartido entrejust_audioyaudio_servicesin colisión;rxdartsin conflicto). Todas las licencias OSI-approved (MIT, Apache-2.0, BSD). Ajustes pendientes: actualizarjust_audioa ^0.10.0 con Flutter ≥3.27.0, signing real para Play Store,google_mobile_adscomentado hasta tener Ad Unit IDs.
Notas técnicas
- Signing:
build.gradle.ktsusa clave debug para release (TODO preexistente). Válido para CI interno y testing. Play Store requiere keystore como secret en Gitea. - Secrets necesarios:
TELEGRAM_BOT_TOKENyTELEGRAM_CHAT_ID(Settings → Secrets del repo en Gitea).
Ficheros añadidos
| Fichero | Descripción |
|---|---|
.gitea/workflows/ci.yml |
Workflow CI/CD Flutter completo (+66 líneas) |
ARQ-REVISION-F1.md |
Revisión arquitectura F1 — stack, licencias, ajustes (+143 líneas) |