Commit Graph

52 Commits

Author SHA1 Message Date
3ef3c59d94 PublisherSync: rileva publisher anche con source RTMP attivo
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 09:45:05 +02:00
61bb22ce44 Fix overlay _air: probesize su intake RTMP e rilevamento zombie
Senza analyzeduration/probesize l'overlay non pubblicava su _air;
YouTube restava in attesa. Esclusi processi ffmpeg zombie da running?.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 09:39:11 +02:00
10fff7ffcb Fix YouTube in attesa: disabilita auto_stop e ricrea broadcast chiusa
YouTube chiudeva la diretta (complete) senza ingest stabile; ora
enable_auto_stop è false e SetupBroadcast.recreate! rigenera link/stream key.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 09:33:07 +02:00
d835bce148 Fix relay YouTube: rimuovi opzioni reconnect non supportate da ffmpeg RTMP
ffmpeg usciva subito con "Option reconnect not found", ingest mai attivo.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 09:21:58 +02:00
4c7be615f1 Fix freeze YouTube al cambio punteggio: PNG atomica e relay stabile
rsvg scrive su .tmp poi rename; il feeder ignora PNG parziali.
YouTube relay: no doppio avvio, reconnect RTMP; overlay restart solo dopo 3 miss.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 09:07:06 +02:00
fde1213ca5 Fix YouTube relay instabile e timer LIVE a zero in app
ffmpeg: probesize/analyzeduration su _air, restart più rapido e avvio relay
al go_live. App: sincronizza started_at dal server e fallback al passaggio live.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:56:59 +02:00
841e99c775 Fix Process.spawn: redirect log ffmpeg fuori dallo splat
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:46:02 +02:00
02ff1de0f6 Fix relay YouTube bloccato: rimuovi ffprobe su RTMP live
ffprobe su rtmp://mediamtx si bloccava in Sidekiq e impediva
l'avvio del relay verso YouTube (pagina sempre in attesa).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:44:57 +02:00
8263475146 Fix YouTube in attesa: audio AAC di riserva, retry attivazione broadcast
Il relay verso YouTube ora gestisce _air senza traccia audio, ritenta
activate_broadcast finché l'ingest è active e riduce la finestra
scheduledStartTime a ~20s.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:37:47 +02:00
bac655aca8 Fix API YouTube: id e mine non insieme in list_live_streams
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:34:50 +02:00
d08cd36527 Fix YouTube waiting: transcode verso RTMP e sync stato live.
Il relay non usa più copy (stream inactive su YouTube); PublisherSync
nel refresh overlay; activate solo quando lo stream YouTube è active.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:32:30 +02:00
2c5f4f82eb YouTube live immediata: relay sempre attivo e attivazione broadcast.
Il relay parte dal job overlay ogni 2s; scheduledStartTime ~90s invece di 5 min;
transition testing/live quando l'ingest RTMP raggiunge YouTube.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 08:19:20 +02:00
2ccbfea75e Corregge avvio RTMP bloccato dopo errore o cambio sessione.
Il motore Android ignorava startStream in CONNECTING/RECONNECTING; la camera
ora resetta prima di pubblicare. YouTube relay parte solo con overlay attivo.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 07:32:15 +02:00
1d67459bbe YouTube come destinazione pubblica, non Match Live TV.
Non propone più il link MLTV per sessioni YouTube; la pagina /live
reindirizza a YouTube; il relay verso YouTube si riavvia al connect.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 07:25:07 +02:00
9fd4d865b3 Corregge keyword youtube_channel in SetupBroadcast.
Il job Sidekiq falliva con ArgumentError unknown keyword :channel,
impedendo la creazione broadcast YouTube dopo la sessione API.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 00:32:15 +02:00
70e704827e Risolve timeout creazione sessione YouTube lato app.
La setup broadcast YouTube (~23s) passa in background job; l'API risponde
subito. Aumentato anche il timeout Dio mobile per createSession YouTube.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 00:18:07 +02:00
fd7a5c2c8e Fix bind_live_broadcast: stream_id come keyword arg.
La gem google-apis-youtube_v3 richiede stream_id: e non un terzo argomento
posizionale, causando 500 in creazione sessione YouTube.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 00:11:38 +02:00
8139d84d88 Fix orario YouTube scheduledStartTime per dirette immediate.
Normalizza la data partita nel futuro richiesto dall'API: se scheduled_at
è passato o assente usa now+5min, con messaggio d'errore più chiaro.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 00:03:19 +02:00
ab9cb02083 Aggiunge overlay server-side burn-in e stabilizza diretta live.
Tabellone, badge e brand sono ricodificati nel flusso _air via OverlayRelay;
sync punteggio HTTP, volume condiviso rails/sidekiq, qualità 720p migliorata
e badge CONNECTING in ripresa da pausa.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 23:55:17 +02:00
565bc2c548 Aggiunge cookie policy, banner consenso e Google Analytics opzionale.
Il banner consente solo necessari o tutti i cookie; GA4 si carica solo dopo
consenso. Aggiornati privacy, footer, sitemap e variabile GOOGLE_ANALYTICS_MEASUREMENT_ID.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 08:00:30 +02:00
1f273f849d Aggiunge modulo Replay, Garage dev e YouTube a livello società.
Pipeline registrazione/upload con storage S3, archivio web e app, proxy replay
per il browser, OAuth YouTube sulla pagina club (Premium Full) e footer legale.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 07:53:11 +02:00
a87cda156b Implementa pausa diretta con copertina slate e ripresa.
Metti in pausa ferma RTMP lato app mantenendo la camera aperta, MediaMTX
manda offline.mp4 agli spettatori e Chiudi termina definitivamente.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 23:31:48 +02:00
422d8848f6 Corregge chiusura diretta YouTube e stop sessione senza broadcast.
transition_live_broadcast richiede status, id e part; evita 500 in chiusura
diretta Match Live TV quando non c'è broadcast YouTube.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 23:06:46 +02:00
1677df7f86 Visibilità pubblico/link-only su tutte le piattaforme di streaming.
Default pubblico; opzione unica privato/non in elenco per Match Live TV,
YouTube piattaforma e canale società. Elenco dirette solo sessioni pubbliche.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 23:00:34 +02:00
1fb5cd5aa2 App: scelta canale YouTube MLTV/società, privacy e condivisione link.
Premium Full può forzare il canale piattaforma; visibilità non in elenco o privato;
share_url unificato per Match Live TV e YouTube.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 22:52:07 +02:00
6ac4db98bb Messaggi chiari per errori YouTube API in creazione diretta.
Include guida su liveStreamingNotEnabled e token non validi.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 22:44:49 +02:00
92c0058085 Corregge OAuth YouTube piattaforma senza access token in memoria.
Il refresh token ENV non veniva scambiato finché expires_at era vuoto,
causando 500 Unauthorized alla creazione sessione YouTube.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 22:43:31 +02:00
9b40deeb61 Unifica admin società/squadre e YouTube Full con fallback MLTV.
Premium Full senza canale società usa il canale piattaforma come Light;
in app restano solo Match Live TV e YouTube Live.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 22:38:28 +02:00
82ff1972a0 Aggiunge abbonamenti omaggio admin per sponsor e promozioni.
Gli admin possono concedere o revocare Premium Light/Full senza Stripe;
il piano omaggio ha priorità sui webhook e la società vede un messaggio dedicato.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 22:26:19 +02:00
566104aff4 Billing upgrade/downgrade, inviti in app e diretta YouTube da mobile.
Upgrade Stripe con addebito immediato; downgrade programmato a fine periodo.
UX billing più sobria con box info; icone piani. API inviti e OAuth YouTube
per staff trasmissione; deep link join; scelta partita programmata o nuova.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 22:15:27 +02:00
2cb267f991 Admin: voce menu YouTube per collegamento canale piattaforma.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 21:12:12 +02:00
d051d60415 Fix 500 callback YouTube: pagina token senza layout admin.
Il layout admin richiedeva admin_logged_in? non disponibile nel callback OAuth.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 21:02:51 +02:00
cd8e97243f Allinea branding homepage a Match Live TV per verifica OAuth Google.
Nome visibile in hero, meta application-name, JSON-LD e documentazione; corregge mismatch con «Match Live Tv» in Console.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 20:04:34 +02:00
71eaf9cf56 Fix callback OAuth YouTube: pagina HTML con refresh token invece di risposta API vuota.
Il codice OAuth va usato una sola volta; messaggio chiaro se si ricarica il callback.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 19:57:08 +02:00
d0552e1aaa Fix: migration YouTube con timestamp univoco (evita conflitto 20260525120000).
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 19:39:27 +02:00
994c1e3c09 Integrazione YouTube Live: OAuth squadra, canale piattaforma Light e UI.
Collegamento da Dettagli squadra e admin per il refresh token Match Live TV; API e app mobile allineate ai piani Light/Full.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 19:36:56 +02:00
1a84d6ae42 Fix checkout Stripe: ricrea customer se ID test su ambiente live.
Evita errore «No such customer» dopo passaggio da sk_test a sk_live.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 19:11:42 +02:00
2b8f842752 Dirette: nasconde partite programmate nel passato.
La pagina /live mostrava tutte le partite da inizio giornata; ora solo con orario futuro.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 19:10:07 +02:00
964e3f472c Admin fatturazione: coda pagamenti senza PDF e upload diretto.
Lista globale dei pagamenti da fatturare con dati intestazione, caricamento
PDF per riga che crea la fattura e invia email; rimuove il flusso bozza manuale.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:31:49 +02:00
b073ded6c1 Admin: voce Fatturazione nel menu e elenco società.
Rende raggiungibili pagamenti e fatture PDF senza passare solo dal dettaglio squadra.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:27:09 +02:00
ef805984ee Rimuove featured anche da billing squadra.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:23:57 +02:00
15e57cddee Card piani: un solo stile di bordo grigio per tutte e tre.
Rimuove featured con contorno rosso che creava 2 card rosse e 1 grigia.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:23:51 +02:00
cf06acf24d Allinea card piani: stessa altezza e bordo uniforme.
Flex column con azioni in basso; highlight Premium Light con box-shadow
invece di bordo rosso diverso che spezzava l’allineamento.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:21:42 +02:00
1901fcce68 Premium Light: canale YouTube indicato come Match Live TV.
Sostituisce la dicitura obsoleta Match TV Light in prezzi, FAQ e funzionalità.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:19:43 +02:00
62d86d16ec Fix prezzi pubblici: Premium Light €5/€40, Full €20/€200.
Ripristina le etichette in PriceCatalog usate da prezzi, abbonamento e checkout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:17:32 +02:00
a5e781729c Billing: fatture manuali, profilo obbligatorio e piani Stripe mensile/annuale.
Rimuove link al portale Stripe in area cliente, aggiunge flusso admin per PDF
fattura e email, blocca checkout senza dati di fatturazione, allinea prezzi
a €4,90/€39,90 e €9,90/€69,90, locale italiano e documentazione deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:10:12 +02:00
148402a97c Fix PCI Stripe e anteprima regia; checkout sempre hosted.
Blocca l'invio di numeri carta dall'API server, usa Checkout anche per i cambi piano e nasconde correttamente il placeholder video in regia.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 08:00:28 +02:00
f4b7be0f80 Billing Stripe, link regia mobile e staff solo trasmissione.
Aggiunge fatturazione club, pagina regia condivisibile senza account, roster squadre e rimuove la modalità controller dall'app (v1.1.0).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 07:23:13 +02:00
4083bc5dee Club come entità principale, branding e fix infrastruttura streaming.
Introduce clubs con abbonamento, branding Active Storage e flusso registrazione società; corregge healthcheck MediaMTX (immagine distroless) e allinea dominio produzione matchlivetv.it.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 09:16:24 +02:00
471291b2c4 Sito marketing, SEO, legal, live programmata e branding Match Live Tv.
Logo e favicon nel header, partite programmate su web e mobile, reset password,
pagine FAQ/sitemap, privacy/termini GDPR e icona Android «Match Live Tv».

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 23:17:15 +02:00