Files
pluriwave/CHANGELOG.md
Kira (Agent) 81db383a47 fix(v0.3.0): audio background + emisoras rotas + errores toast + icono
- 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.
2026-04-04 18:09:59 +02:00

3.3 KiB

Changelog — PluriWave

[0.3.0] — 2026-04-04

Fixes (prioridad alta — petición WhikY)

  • Audio en backgroundServicioAudio refactorizado para delegar toda la reproducción a PluriWaveAudioHandler (audio_service). La notificación foreground de Android mantiene el audio vivo al apagar pantalla. Handler inicializado en main.dart con AudioService.init() y registrado globalmente. onTaskRemoved libera recursos al cerrar la app. mediaItem propagado con nombre, artista y artwork de la emisora.
  • Filtrar emisoras rotasServicioRadio añade lastcheckok=1 en todas las peticiones a la API. Solo se devuelven emisoras verificadas como funcionales por Radio Browser.
  • Errores como SnackBarEstadoRadio emite errores de reproducción y búsqueda por errorStream (StreamController broadcast). _PaginaPrincipalState.didChangeDependencies suscribe al stream y muestra SnackBar flotante 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_round añadido. android:roundIcon en 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.yml para el runner macmini-flutter. Jobs en secuencia: flutter pub getflutter testflutter build apk --releaseflutter 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 a main y PRs contra main.
  • ARQ-REVISION-F1.md — revisión de arquitectura del stack Flutter. Veredicto: aprobado. Sin conflictos de dependencias (audio_session compartido entre just_audio y audio_service sin colisión; rxdart sin conflicto). Todas las licencias OSI-approved (MIT, Apache-2.0, BSD). Ajustes pendientes: actualizar just_audio a ^0.10.0 con Flutter ≥3.27.0, signing real para Play Store, google_mobile_ads comentado hasta tener Ad Unit IDs.

Notas técnicas

  • Signing: build.gradle.kts usa 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_TOKEN y TELEGRAM_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)