Ajout de la détection des flux continus
Ajout d'une nouvelle propriété `is_continuous_stream` pour identifier les flux continus (radio, stream) plutôt que les fichiers avec durée fixe. - Ajout de la propriété `is_continuous_stream` dans `TrackMetadata` - Implémentation de la détection dans plusieurs fichiers : control_point.rs, media_server.rs, music_renderer/watcher.rs et openhome_client.rs - Utilisation de la fonction `is_continuous_stream_url` pour déterminer si l'URI correspond à un flux continu
This commit is contained in:
@@ -1690,6 +1690,7 @@ fn playback_item_track_metadata(item: &PlaybackItem) -> TrackMetadata {
|
|||||||
track_number: None,
|
track_number: None,
|
||||||
creator: None,
|
creator: None,
|
||||||
duration: None,
|
duration: None,
|
||||||
|
is_continuous_stream: crate::music_renderer::is_continuous_stream_url(&item.uri),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -556,6 +556,8 @@ pub fn playback_item_from_entry(
|
|||||||
|
|
||||||
let resource = resource.unwrap();
|
let resource = resource.unwrap();
|
||||||
|
|
||||||
|
let is_continuous_stream = crate::music_renderer::is_continuous_stream_url(&resource.uri);
|
||||||
|
|
||||||
let metadata = TrackMetadata {
|
let metadata = TrackMetadata {
|
||||||
title: Some(entry.title.clone()),
|
title: Some(entry.title.clone()),
|
||||||
artist: entry.artist.clone(),
|
artist: entry.artist.clone(),
|
||||||
@@ -566,6 +568,7 @@ pub fn playback_item_from_entry(
|
|||||||
track_number: entry.track_number.clone(),
|
track_number: entry.track_number.clone(),
|
||||||
creator: entry.creator.clone(),
|
creator: entry.creator.clone(),
|
||||||
duration: resource.duration.clone(),
|
duration: resource.duration.clone(),
|
||||||
|
is_continuous_stream,
|
||||||
};
|
};
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
|
|||||||
@@ -94,6 +94,9 @@ pub struct TrackMetadata {
|
|||||||
pub track_number: Option<String>,
|
pub track_number: Option<String>,
|
||||||
pub creator: Option<String>,
|
pub creator: Option<String>,
|
||||||
pub duration: Option<String>,
|
pub duration: Option<String>,
|
||||||
|
/// Indique si cette piste correspond à un flux continu (radio, stream)
|
||||||
|
/// plutôt qu'à un fichier avec une durée fixe
|
||||||
|
pub is_continuous_stream: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Copy)]
|
#[derive(Clone, Debug, Copy)]
|
||||||
|
|||||||
@@ -156,6 +156,10 @@ pub fn extract_track_metadata(position: &PlaybackPositionInfo) -> Option<TrackMe
|
|||||||
// Extract first item metadata
|
// Extract first item metadata
|
||||||
let item = didl.items.first()?;
|
let item = didl.items.first()?;
|
||||||
|
|
||||||
|
// Déterminer si c'est un stream continu à partir de l'URI
|
||||||
|
let uri = item.resources.first().map(|r| r.url.as_str()).unwrap_or("");
|
||||||
|
let is_continuous_stream = crate::music_renderer::is_continuous_stream_url(uri);
|
||||||
|
|
||||||
Some(TrackMetadata {
|
Some(TrackMetadata {
|
||||||
title: Some(item.title.clone()),
|
title: Some(item.title.clone()),
|
||||||
artist: item.artist.clone(),
|
artist: item.artist.clone(),
|
||||||
@@ -166,6 +170,7 @@ pub fn extract_track_metadata(position: &PlaybackPositionInfo) -> Option<TrackMe
|
|||||||
track_number: item.original_track_number.clone(),
|
track_number: item.original_track_number.clone(),
|
||||||
creator: item.creator.clone(),
|
creator: item.creator.clone(),
|
||||||
duration: item.resources.first().and_then(|r| r.duration.clone()),
|
duration: item.resources.first().and_then(|r| r.duration.clone()),
|
||||||
|
is_continuous_stream,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -954,6 +954,10 @@ pub fn parse_track_metadata_from_didl(xml: &str) -> Option<TrackMetadata> {
|
|||||||
"Parsed DIDL metadata for track"
|
"Parsed DIDL metadata for track"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Déterminer si c'est un stream continu à partir de l'URI
|
||||||
|
let uri = item.resources.first().map(|r| r.url.as_str()).unwrap_or("");
|
||||||
|
let is_continuous_stream = crate::music_renderer::is_continuous_stream_url(uri);
|
||||||
|
|
||||||
Some(TrackMetadata {
|
Some(TrackMetadata {
|
||||||
title: Some(item.title.clone()),
|
title: Some(item.title.clone()),
|
||||||
artist: item.artist.clone(),
|
artist: item.artist.clone(),
|
||||||
@@ -964,6 +968,7 @@ pub fn parse_track_metadata_from_didl(xml: &str) -> Option<TrackMetadata> {
|
|||||||
track_number: item.original_track_number.clone(),
|
track_number: item.original_track_number.clone(),
|
||||||
creator: item.creator.clone(),
|
creator: item.creator.clone(),
|
||||||
duration: item.resources.first().and_then(|r| r.duration.clone()),
|
duration: item.resources.first().and_then(|r| r.duration.clone()),
|
||||||
|
is_continuous_stream,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user