From d3d2f24a6a60c1c7aee38f00c68ae5482ddfb7ef Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Fri, 23 Jan 2026 22:30:10 +0100 Subject: [PATCH] Ajout du support du proxy pour les flux audio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mise à jour de la fonction build_stream_resource pour intégrer l'URL du proxy et un fallback direct vers l'URL du flux. Cela permet de détecter l'activité du stream via le proxy PMOMusic. --- pmoradiofrance/src/playlist.rs | 39 ++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/pmoradiofrance/src/playlist.rs b/pmoradiofrance/src/playlist.rs index 8ffe9e0f..89f31ade 100644 --- a/pmoradiofrance/src/playlist.rs +++ b/pmoradiofrance/src/playlist.rs @@ -347,7 +347,7 @@ impl StationPlaylist { ); // Construction de la ressource (stream) - let resource = Self::build_stream_resource(metadata); + let resource = Self::build_stream_resource(metadata, &station.slug, server_base_url); let item = Item { id: format!("radiofrance:{}:stream", station.slug), @@ -390,7 +390,7 @@ impl StationPlaylist { Self::extract_metadata_fields(station, metadata); let (album_art, album_art_pk) = Self::extract_cover_url(metadata, server_base_url); - let resource = Self::build_stream_resource(metadata); + let resource = Self::build_stream_resource(metadata, &station.slug, server_base_url); Ok(Item { id: format!("radiofrance:{}:stream", station.slug), @@ -616,8 +616,12 @@ impl StationPlaylist { } } - /// Construit la ressource stream - fn build_stream_resource(metadata: &LiveResponse) -> Resource { + /// Construit la ressource stream avec URL du proxy + fn build_stream_resource( + metadata: &LiveResponse, + station_slug: &str, + server_base_url: Option<&str>, + ) -> Resource { // Calculer la durée restante (maintenant -> end_time) // Cela permet au curseur de progresser de 0 jusqu'à la fin de l'émission let duration = if let Some(end) = metadata.now.end_time { @@ -657,10 +661,24 @@ impl StationPlaylist { None }; - // Trouver le meilleur stream HiFi + // Construire l'URL du proxy ou fallback direct + let url = if let Some(base_url) = server_base_url { + // Utiliser le proxy PMOMusic pour détecter quand le stream est actif + format!("{}/api/radiofrance/{}/stream", base_url, station_slug) + } else { + // Fallback : utiliser l'URL directe si pas de base_url + metadata + .now + .media + .best_hifi_stream() + .map(|s| s.url.clone()) + .unwrap_or_default() + }; + + // Déterminer le protocol_info et caractéristiques audio let best_stream = metadata.now.media.best_hifi_stream(); - let (url, protocol_info, sample_frequency, nr_audio_channels) = match best_stream { + let (protocol_info, sample_frequency, nr_audio_channels) = match best_stream { Some(stream) => { let protocol_info = match stream.format { StreamFormat::Aac => "http-get:*:audio/aac:*".to_string(), @@ -678,16 +696,11 @@ impl StationPlaylist { _ => None, }; - (stream.url.clone(), protocol_info, sample_freq, channels) + (protocol_info, sample_freq, channels) } None => { // Fallback : pas de stream trouvé - ( - String::new(), - "http-get:*:audio/aac:*".to_string(), - None, - None, - ) + ("http-get:*:audio/aac:*".to_string(), None, None) } };