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