8741cdba5f67bc36bd1d9789c66e922482a55b4a
The system ran two independent next-occurrence engines: Dart computes proximaProgramable (what the UI shows) and sends it as triggerAtMillis, but the native scheduleAlarm discarded it and recomputed from hour/minute/weekdays. Two engines over the same data WILL diverge — observed on-device: Dart said "today 22:48", the native weekday scan armed next Friday, and the alarm silently never rang at its hour while snooze (which bypasses recomputation and obeys a timestamp) always worked. That asymmetry was the user-visible "saving an alarm breaks, snoozing works" split. Fresh channel calls now arm exactly the trigger Dart sent whenever it is in the future or within the shared 90s imminence window; the native recompute remains as the fallback for stale triggers and for autonomous re-arms with no fresh Dart data (onAlarmFired's next occurrence, boot/persisted reschedules). Snooze preservation is untouched: a live native snooze still short-circuits through the compute path. Also logs the weekdays/trigger/lastHandled payload on every schedule call so day-convention divergences are diagnosable from logcat.
PluriWave
Radio mundial con ecualizador personalizable, reconocimiento de canciones y UI premium.
Features
- +53.000 emisoras de 238 países (Radio Browser API)
- Ecualizador por emisora — guarda tu preset favorito para cada radio
- Reconocimiento de canciones — "¿Qué suena?" sin salir de la app
- Timer de auto-apagado — perfecto para dormir
- Reproducción en segundo plano — sigue sonando con la pantalla apagada
- Favoritos — acceso rápido a emisoras preferidas
- Compartir — envía emisoras a tus amigos
- UI premium — Material You, visualizador de audio, animaciones fluidas
Monetización
- 14 días PRO gratis al instalar
- Free: radio + favoritos + timer + background (con ads)
- PRO €2.99/año: sin ads + ecualizador + reconocimiento ilimitado
Stack
- Frontend: Flutter (Android + iOS)
- Radio API: Radio Browser (gratis, +53K emisoras)
- Audio: just_audio + audio_service
- Ecualizador: just_audio equalizer (Android nativo)
- Reconocimiento: AudD API (1000 req/mes free)
- Ads: Google AdMob
- Compras: in_app_purchase
CI/CD
Workflow Gitea Actions en .gitea/workflows/ci.yml, runner macmini-flutter.
Jobs: flutter pub get → flutter test → build apk --release → build appbundle --release
Artifacts: APK y AAB guardados en Gitea con nombre pluriwave-apk-<sha> / pluriwave-aab-<sha>.
Notificaciones: Telegram al completar (éxito ✅ / fallo ❌).
Secrets necesarios en el repo:
| Secret | Uso |
|---|---|
TELEGRAM_BOT_TOKEN |
Notificaciones CI |
TELEGRAM_CHAT_ID |
Canal de destino |
Signing: build de release usa clave debug (válido para CI interno). Para Play Store se requiere keystore como secret adicional.
Desarrollador
FreeTimeLab — freetimelab.es
Licencia
MIT
Description
PluriWave — Radio mundial con ecualizador, reconocimiento de canciones y UI premium
49 MiB
Languages
Dart
86%
HTML
7.1%
Kotlin
5.1%
JavaScript
1.6%
Swift
0.1%