2025-10-19 01:31:22 +02:00
|
|
|
//! Exemple de test pour la conversion FLAC en streaming
|
|
|
|
|
//!
|
|
|
|
|
//! Cet exemple télécharge un fichier audio depuis une URL et le convertit
|
|
|
|
|
//! en FLAC en utilisant la fonction create_flac_transformer().
|
|
|
|
|
|
|
|
|
|
use pmoaudiocache::cache;
|
|
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
|
async fn main() -> anyhow::Result<()> {
|
|
|
|
|
// Initialiser le logger
|
|
|
|
|
tracing_subscriber::fmt()
|
|
|
|
|
.with_max_level(tracing::Level::INFO)
|
|
|
|
|
.init();
|
|
|
|
|
|
|
|
|
|
// Créer un répertoire temporaire pour le cache
|
|
|
|
|
let cache_dir = "/tmp/test_audio_cache";
|
|
|
|
|
std::fs::create_dir_all(cache_dir)?;
|
|
|
|
|
|
|
|
|
|
println!("Création du cache audio avec conversion FLAC streaming...");
|
|
|
|
|
let cache = Arc::new(cache::new_cache(cache_dir, 100)?);
|
|
|
|
|
|
|
|
|
|
// URL de test - fichier audio de test public
|
|
|
|
|
// Note: Remplacez par une URL valide de votre choix
|
|
|
|
|
let test_url = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3";
|
|
|
|
|
|
|
|
|
|
println!("Téléchargement et conversion de: {}", test_url);
|
|
|
|
|
println!("Ceci va télécharger le fichier en streaming et le convertir en FLAC...");
|
|
|
|
|
|
|
|
|
|
// Ajouter le fichier au cache avec conversion FLAC
|
|
|
|
|
match cache::add_with_metadata_extraction(&cache, test_url, Some("test:streaming")).await {
|
|
|
|
|
Ok(pk) => {
|
|
|
|
|
println!("✓ Fichier converti avec succès!");
|
|
|
|
|
println!(" Clé primaire: {}", pk);
|
|
|
|
|
|
2025-10-26 13:05:46 +01:00
|
|
|
let file_path = cache.get_file_path(&pk);
|
2025-10-19 01:31:22 +02:00
|
|
|
println!(" Chemin: {}", file_path.display());
|
|
|
|
|
|
|
|
|
|
if let Ok(metadata) = std::fs::metadata(&file_path) {
|
|
|
|
|
println!(" Taille: {} bytes", metadata.len());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Récupérer les métadonnées audio
|
|
|
|
|
match cache::get_metadata(&cache, &pk) {
|
|
|
|
|
Ok(metadata) => {
|
|
|
|
|
println!(" Métadonnées:");
|
|
|
|
|
if let Some(title) = &metadata.title {
|
|
|
|
|
println!(" Titre: {}", title);
|
|
|
|
|
}
|
|
|
|
|
if let Some(artist) = &metadata.artist {
|
|
|
|
|
println!(" Artiste: {}", artist);
|
|
|
|
|
}
|
|
|
|
|
if let Some(duration) = metadata.duration_secs {
|
|
|
|
|
println!(" Durée: {}s", duration);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Err(e) => println!(" Impossible de lire les métadonnées: {}", e),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Err(e) => {
|
|
|
|
|
eprintln!("✗ Erreur lors de la conversion: {}", e);
|
|
|
|
|
return Err(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
println!("\nTest terminé avec succès!");
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|