refactor: Clean up obsolete per-track references and broken example
Remove obsolete code referencing the deleted per-track feature: - Remove FlacDecode and WavEncode error variants from error.rs - Remove claxon::Error conversion impl - Delete broken radio_paradise_stream.rs example (incorrect imports) Result: - error.rs: 77 → 60 lines (-17 lines, -22%) - examples/radio_paradise_stream.rs: deleted (-100 lines) - Warnings reduced from 7 to 4 All remaining code compiles successfully.
This commit is contained in:
@@ -1,114 +0,0 @@
|
|||||||
//! Exemple d'utilisation de RadioParadiseStreamSource
|
|
||||||
//!
|
|
||||||
//! Ce exemple montre comment :
|
|
||||||
//! - Créer un RadioParadiseStreamSource
|
|
||||||
//! - Ajouter des block IDs à télécharger via push_block_id()
|
|
||||||
//! - Connecter à un sink pour récupérer les segments audio
|
|
||||||
|
|
||||||
use pmoaudio::{
|
|
||||||
nodes::{DEFAULT_CHUNK_DURATION_MS, TypedAudioNode},
|
|
||||||
pipeline::AudioPipelineNode,
|
|
||||||
};
|
|
||||||
use pmoparadise::{
|
|
||||||
client::RadioParadiseClient,
|
|
||||||
models::EventId,
|
|
||||||
RadioParadiseStreamSource,
|
|
||||||
};
|
|
||||||
use tokio_util::sync::CancellationToken;
|
|
||||||
|
|
||||||
#[tokio::main]
|
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
// 1. Créer un client Radio Paradise
|
|
||||||
let client = RadioParadiseClient::new(pmoparadise::Channel::MainMix);
|
|
||||||
|
|
||||||
// 2. Créer le source node avec durée de chunk par défaut (500ms)
|
|
||||||
let mut source = RadioParadiseStreamSource::new(
|
|
||||||
client.clone(),
|
|
||||||
DEFAULT_CHUNK_DURATION_MS,
|
|
||||||
);
|
|
||||||
|
|
||||||
// 3. Ajouter des blocks IDs à télécharger
|
|
||||||
// Dans un cas réel, ces IDs viendraient du nowplaying stream
|
|
||||||
source.push_block_id(EventId(12345));
|
|
||||||
source.push_block_id(EventId(12346));
|
|
||||||
source.push_block_id(EventId(12347));
|
|
||||||
|
|
||||||
// 4. Optionnel : Connecter à un sink (ici juste un exemple de structure)
|
|
||||||
// let sink = create_your_sink();
|
|
||||||
// source.add_child(Box::new(sink));
|
|
||||||
|
|
||||||
// 5. Lancer le traitement
|
|
||||||
let stop_token = CancellationToken::new();
|
|
||||||
|
|
||||||
println!("🎵 RadioParadiseStreamSource lancé...");
|
|
||||||
println!(" - Téléchargement et décodage des blocs FLAC");
|
|
||||||
println!(" - Insertion automatique des TrackBoundary");
|
|
||||||
println!(" - Cache anti-redondance de {} blocs", 10);
|
|
||||||
|
|
||||||
// Dans un cas réel, on lancerait :
|
|
||||||
// source.run(stop_token).await?;
|
|
||||||
|
|
||||||
// Pour cet exemple, on simule juste le comportement
|
|
||||||
println!("\n✅ Configuration réussie !");
|
|
||||||
println!("\nFlux d'exécution :");
|
|
||||||
println!("1. Attente d'un block ID dans la queue (timeout 3s)");
|
|
||||||
println!("2. Vérification cache anti-redondance");
|
|
||||||
println!("3. Téléchargement des métadonnées du bloc");
|
|
||||||
println!("4. Téléchargement et décodage du FLAC (bitrate=4)");
|
|
||||||
println!("5. Envoi des AudioChunk (I16 ou I24)");
|
|
||||||
println!("6. Insertion TrackBoundary au timing correct (basé sur samples)");
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════════════════════
|
|
||||||
// Exemple avancé : Utilisation avec nowplaying stream
|
|
||||||
// ═══════════════════════════════════════════════════════════════════════════
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
async fn example_with_nowplaying_stream() -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
use futures_util::StreamExt;
|
|
||||||
use pmoparadise::Channel;
|
|
||||||
|
|
||||||
let client = RadioParadiseClient::new(Channel::MainMix);
|
|
||||||
let mut source = RadioParadiseStreamSource::new(
|
|
||||||
client.clone(),
|
|
||||||
DEFAULT_CHUNK_DURATION_MS,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Récupérer le nowplaying stream
|
|
||||||
let nowplaying = client.nowplaying_stream().await?;
|
|
||||||
|
|
||||||
// Clone pour le spawned task
|
|
||||||
let stop_token = CancellationToken::new();
|
|
||||||
let stop_clone = stop_token.clone();
|
|
||||||
|
|
||||||
// Task 1 : Alimenter la queue avec les nouveaux blocks
|
|
||||||
let feed_task = tokio::spawn(async move {
|
|
||||||
tokio::pin!(nowplaying);
|
|
||||||
|
|
||||||
while let Some(result) = nowplaying.next().await {
|
|
||||||
match result {
|
|
||||||
Ok(event) => {
|
|
||||||
println!("📻 Nouveau bloc détecté : {:?}", event.event);
|
|
||||||
source.push_block_id(event.event);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
eprintln!("❌ Erreur nowplaying stream : {}", e);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Task 2 : Traiter les blocs (dans un cas réel)
|
|
||||||
// let process_task = tokio::spawn(async move {
|
|
||||||
// source.run(stop_clone).await
|
|
||||||
// });
|
|
||||||
|
|
||||||
// Attendre les tasks
|
|
||||||
feed_task.await?;
|
|
||||||
// process_task.await??;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
@@ -34,16 +34,6 @@ pub enum Error {
|
|||||||
#[error("Invalid event ID: {0}")]
|
#[error("Invalid event ID: {0}")]
|
||||||
InvalidEvent(String),
|
InvalidEvent(String),
|
||||||
|
|
||||||
/// FLAC decoding error (per-track feature)
|
|
||||||
#[cfg(feature = "per-track")]
|
|
||||||
#[error("FLAC decoding error: {0}")]
|
|
||||||
FlacDecode(String),
|
|
||||||
|
|
||||||
/// WAV encoding error (per-track feature)
|
|
||||||
#[cfg(feature = "per-track")]
|
|
||||||
#[error("WAV encoding error: {0}")]
|
|
||||||
WavEncode(#[from] hound::Error),
|
|
||||||
|
|
||||||
/// Track not found in block
|
/// Track not found in block
|
||||||
#[error("Track not found at index {0}")]
|
#[error("Track not found at index {0}")]
|
||||||
TrackNotFound(usize),
|
TrackNotFound(usize),
|
||||||
@@ -67,11 +57,3 @@ impl Error {
|
|||||||
Self::Other(msg.into())
|
Self::Other(msg.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement conversion from claxon errors for per-track feature
|
|
||||||
#[cfg(feature = "per-track")]
|
|
||||||
impl From<claxon::Error> for Error {
|
|
||||||
fn from(err: claxon::Error) -> Self {
|
|
||||||
Error::FlacDecode(err.to_string())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user