Add logging to container tree building and station item creation

This commit adds conditional logging to the container tree building process and station item creation in the radio france source. The logging includes information about the number of groups, standalone stations, webradios, and local radios being processed. It also logs when using cached items and when starting metadata refresh tasks. The logging is enabled only when the 'logging' feature is activated.
This commit is contained in:
2026-01-23 12:32:18 +01:00
parent 5c5e1d534b
commit 418b0b7cbe
2 changed files with 47 additions and 2 deletions

View File

@@ -58,5 +58,6 @@ radiofrance = [
"api",
"dep:pmoradiofrance",
"pmoradiofrance/server",
"pmoradiofrance/logging",
"dep:pmoconfig"
]

View File

@@ -226,27 +226,62 @@ impl RadioFranceSource {
/// Build the UPnP container tree dynamically from station data
async fn build_container_tree(&self) -> Result<Container> {
#[cfg(feature = "logging")]
tracing::debug!("Building container tree");
let stations = self.client.get_stations().await?;
let groups = StationGroups::from_stations(stations);
#[cfg(feature = "logging")]
tracing::debug!(
"Groups: {} standalone, {} with webradios, {} local radios",
groups.standalone.len(),
groups.with_webradios.len(),
groups.local_radios.len()
);
let mut containers = Vec::new();
let mut items = Vec::new();
// 1. Standalone stations → direct items (avec appels API)
#[cfg(feature = "logging")]
tracing::debug!(
"Building {} standalone station items",
groups.standalone.len()
);
for station in &groups.standalone {
items.push(self.build_station_item(station).await?);
}
// 2. Stations with webradios → containers
#[cfg(feature = "logging")]
tracing::debug!("Building {} group containers", groups.with_webradios.len());
for group in &groups.with_webradios {
#[cfg(feature = "logging")]
tracing::debug!("Building container for group: {}", group.main.name);
containers.push(self.build_station_container(group).await?);
}
// 3. Local radios → single "Radios ICI" container
#[cfg(feature = "logging")]
tracing::debug!(
"Building ICI container with {} local radios",
groups.local_radios.len()
);
if !groups.local_radios.is_empty() {
containers.push(self.build_ici_container(&groups.local_radios).await?);
}
#[cfg(feature = "logging")]
tracing::debug!(
"Container tree built: {} containers, {} items",
containers.len(),
items.len()
);
Ok(Container {
id: "radiofrance".to_string(),
parent_id: "0".to_string(),
@@ -304,10 +339,19 @@ impl RadioFranceSource {
///
/// Fetches live metadata to create a complete item with stream URL.
async fn build_station_item(&self, station: &Station) -> Result<Item> {
#[cfg(feature = "logging")]
tracing::debug!(
"Building station item for: {} ({})",
station.name,
station.slug
);
let playlists = self.playlists.read().await;
// If we already have this station in cache, use it
if let Some(existing) = playlists.get(&station.slug) {
#[cfg(feature = "logging")]
tracing::debug!("Using cached item for: {}", station.slug);
return Ok(existing.stream_item.clone());
}
@@ -335,8 +379,8 @@ impl RadioFranceSource {
playlists_write.insert(station.slug.clone(), playlist.clone());
drop(playlists_write);
// Start metadata refresh task
let _ = self.start_metadata_refresh(&station.slug).await;
// Note: We don't start metadata refresh here to avoid blocking during browse.
// Refresh will be started in resolve_uri() when the stream is actually played.
Ok(playlist.stream_item)
}