# G Radio Player

Reproductor de radio profesional — GTK4 + GStreamer + Rust

## Binarios

| Binario | Descripción |
|---|---|
| `radio-player` | Interfaz principal GTK4 |
| `comercial-scheduler` | Carga comerciales y eventos al segundo :58 de cada minuto |
| `playlist-refill` | Mantiene la cola de música con 14 temas leyendo de la parrilla |

## Compilar

```bash
./build.sh
```

## Ejecutar

```bash
./run.sh          # inicia los tres procesos juntos
```

O por separado (para depuración):

```bash
RUST_LOG=info ./target/release/radio-player
./target/release/comercial-scheduler
./target/release/playlist-refill
```

## Estructura de archivos

```
$HOME/.gradio/data/
├── tmp/
│   ├── playlist4           # cola de música  (ruta TAB MM:SS.mmm)
│   ├── comercialeslist4    # cola de comerciales
│   ├── eventos-esperalist  # eventos post-comerciales
│   └── eventoslist         # eventos emergentes
├── comerciales/
│   └── {HH}/{MM}.com       # pautas por hora:minuto
│       formato: ruta|dias|YYYYMMDD_ini|YYYYMMDD_fin
│       dias: "12345" = Lun-Vie, "67" = Sáb-Dom
├── eventos-espera/
│   └── {HH}/{MM}.com       # mismo formato
├── eventos/
│   └── {HH}/{MM}.com       # mismo formato
├── parrilla/
│   └── {DOW}/{HH}-{HH+1}.mus  # archivos de música por franja
│       formato: ruta/al/archivo.mp3  o  /ruta/carpeta/*
└── reporte/
    ├── GR6-parrilla-YYYY-MM-DD.txt
    ├── GR6-comercial-YYYY-MM-DD.txt
    └── GR6-evento-YYYY-MM-DD.txt

$HOME/.gradio/data/mix          # segundos de crossfade
$HOME/.gradio/data/tmp/upvol    # volumen normal 0-100
$HOME/.gradio/data/tmp/downvol  # volumen duck 0-100
$HOME/.gradio/data/panel/Time/  # HRS{HH}.mp3, HRS{HH}_O.mp3, MIN{MM}.mp3

$HOME/G Radio/inicio-espacio-pub/   # jingles inicio tanda
$HOME/G Radio/fin-espacio-pub/      # jingles fin tanda
```

## Formato de pautas (.com)

```
/ruta/al/audio.mp3|12345|20250101|20251231
/otra/pista.wav|67|20250601|20250630
```

- Campo 1: ruta del archivo
- Campo 2: máscara de días (1=Lun … 7=Dom)
- Campo 3: fecha inicio YYYYMMDD
- Campo 4: fecha fin YYYYMMDD

## Formato de parrilla (.mus)

```
/ruta/carpeta/*          # elige aleatoriamente de la carpeta
/ruta/exacta/tema.mp3   # archivo concreto
```

## Dependencias del sistema

- GTK4 ≥ 4.6
- GStreamer ≥ 1.20 con plugins: gst-plugins-base, gst-plugins-good, gst-plugins-ugly
- ffprobe (paquete ffmpeg) — usado por playlist-refill para leer duraciones

## Variables de entorno

- `GRADIO_RELAY_URL` — URL del servidor de relay WebSocket para acceso remoto vía
  internet (default `wss://relay.example.com/ws`). Para autohospedaje, definirla antes
  de lanzar `radio-player`.

## Licencia

Distribuido bajo los términos de la **GNU General Public License v3.0 o posterior**
(GPL-3.0-or-later). Ver el archivo [`LICENSE`](./LICENSE).

Este programa enlaza dinámicamente con **GTK4** y **GStreamer**, ambos publicados
bajo LGPL-2.1+ y compatibles con GPL-3.0.
