Enhance Radio France source with API routes initialization and default album art

This commit enhances the Radio France source by:

1. Updating the main.rs file to clarify the purpose of registering the Radio France source, including API route initialization
2. Modifying sources.rs to:
   - Add RadioFranceExt to the imports
   - Initialize API routes for Radio France after registering the source
3. Updating source.rs to:
   - Use a default logo for Radio France containers when server_base_url is configured
   - Apply the default logo to both group and 'Radios ICI' containers

These changes improve the integration and visual presentation of Radio France content within the media server.
This commit is contained in:
2026-01-23 20:21:11 +01:00
parent ab2f1af620
commit df8b062af6
3 changed files with 25 additions and 4 deletions

View File

@@ -54,7 +54,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
} }
} }
// Enregistrer la source Radio France // Enregistrer la source Radio France (inclut l'initialisation des routes API)
info!("📻 Registering Radio France source..."); info!("📻 Registering Radio France source...");
if let Err(e) = server.write().await.register_radiofrance().await { if let Err(e) = server.write().await.register_radiofrance().await {
tracing::warn!("⚠️ Failed to register Radio France source: {}", e); tracing::warn!("⚠️ Failed to register Radio France source: {}", e);

View File

@@ -243,7 +243,7 @@ impl SourcesExt for Server {
#[cfg(feature = "radiofrance")] #[cfg(feature = "radiofrance")]
async fn register_radiofrance(&mut self) -> Result<()> { async fn register_radiofrance(&mut self) -> Result<()> {
use pmoradiofrance::{RadioFranceSource, RadioFranceStatefulClient}; use pmoradiofrance::{RadioFranceExt, RadioFranceSource, RadioFranceStatefulClient};
tracing::info!("Initializing Radio France source..."); tracing::info!("Initializing Radio France source...");
@@ -265,6 +265,11 @@ impl SourcesExt for Server {
// Enregistrer la source // Enregistrer la source
self.register_music_source(Arc::new(source)).await; self.register_music_source(Arc::new(source)).await;
// Initialiser les routes API Radio France
self.init_radiofrance().await.map_err(|e| {
SourceInitError::RadioFranceError(format!("Failed to init API routes: {}", e))
})?;
tracing::info!("✅ Radio France source registered successfully"); tracing::info!("✅ Radio France source registered successfully");
Ok(()) Ok(())

View File

@@ -305,6 +305,14 @@ impl RadioFranceSource {
async fn build_station_container(&self, group: &StationGroup) -> Result<Container> { async fn build_station_container(&self, group: &StationGroup) -> Result<Container> {
let child_count = 1 + group.webradios.len(); // main + webradios let child_count = 1 + group.webradios.len(); // main + webradios
// Utiliser le logo par défaut si server_base_url est configuré
let album_art = self.server_base_url.as_ref().map(|base| {
format!(
"{}/api/radiofrance/default-logo",
base.trim_end_matches('/')
)
});
Ok(Container { Ok(Container {
id: format!("radiofrance:group:{}", group.main.slug), id: format!("radiofrance:group:{}", group.main.slug),
parent_id: "radiofrance".to_string(), parent_id: "radiofrance".to_string(),
@@ -314,7 +322,7 @@ impl RadioFranceSource {
title: group.main.name.clone(), title: group.main.name.clone(),
class: "object.container".to_string(), class: "object.container".to_string(),
artist: None, artist: None,
album_art: None, album_art,
containers: vec![], containers: vec![],
items: vec![], items: vec![],
}) })
@@ -323,6 +331,14 @@ impl RadioFranceSource {
/// Build the "Radios ICI" container /// Build the "Radios ICI" container
/// Returns an empty container - items will be built when browsing into it /// Returns an empty container - items will be built when browsing into it
async fn build_ici_container(&self, local_radios: &[Station]) -> Result<Container> { async fn build_ici_container(&self, local_radios: &[Station]) -> Result<Container> {
// Utiliser le logo par défaut si server_base_url est configuré
let album_art = self.server_base_url.as_ref().map(|base| {
format!(
"{}/api/radiofrance/default-logo",
base.trim_end_matches('/')
)
});
Ok(Container { Ok(Container {
id: "radiofrance:ici".to_string(), id: "radiofrance:ici".to_string(),
parent_id: "radiofrance".to_string(), parent_id: "radiofrance".to_string(),
@@ -332,7 +348,7 @@ impl RadioFranceSource {
title: "Radios ICI".to_string(), title: "Radios ICI".to_string(),
class: "object.container".to_string(), class: "object.container".to_string(),
artist: None, artist: None,
album_art: None, album_art,
containers: vec![], containers: vec![],
items: vec![], items: vec![],
}) })