diff --git a/pmoparadise/examples/play_and_cache.rs b/pmoparadise/examples/play_and_cache.rs index 6a8b77f8..57354fa6 100644 --- a/pmoparadise/examples/play_and_cache.rs +++ b/pmoparadise/examples/play_and_cache.rs @@ -100,11 +100,10 @@ async fn main() -> Result<(), Box> { )?); tracing::debug!("Cover cache initialized at: {}", cover_cache_dir); - // Enregistrer les caches dans le registre global pmoupnp + // Enregistrer le cache audio dans pmoplaylist // (requis par pmoplaylist pour valider les pks) - pmoupnp::register_audio_cache(audio_cache.clone()); - pmoupnp::register_cover_cache(cover_cache.clone()); - tracing::debug!("Caches registered in pmoupnp global registry"); + pmoplaylist::register_audio_cache(audio_cache.clone()); + tracing::debug!("Audio cache registered in pmoplaylist"); // Utiliser le gestionnaire de playlist singleton tracing::info!("Getting playlist manager..."); diff --git a/pmoplaylist/src/lib.rs b/pmoplaylist/src/lib.rs index a54349b9..19d03899 100644 --- a/pmoplaylist/src/lib.rs +++ b/pmoplaylist/src/lib.rs @@ -57,7 +57,7 @@ mod config_ext; // Réexports publics pub use error::{Error, Result}; pub use handle::{ReadHandle, WriteHandle}; -pub use manager::{PlaylistManager, PlaylistManager as Manager}; +pub use manager::{register_audio_cache, PlaylistManager, PlaylistManager as Manager}; pub use track::PlaylistTrack; #[cfg(feature = "pmoconfig")] diff --git a/pmoplaylist/src/manager.rs b/pmoplaylist/src/manager.rs index e622b2b1..7a4e148c 100644 --- a/pmoplaylist/src/manager.rs +++ b/pmoplaylist/src/manager.rs @@ -15,6 +15,9 @@ use tokio::sync::RwLock; /// Singleton PlaylistManager static PLAYLIST_MANAGER: OnceCell = OnceCell::new(); +/// Registre global du cache audio +static AUDIO_CACHE: OnceCell> = OnceCell::new(); + /// Structure interne du manager struct ManagerInner { playlists: RwLock>>, @@ -284,9 +287,35 @@ pub(crate) async fn delete_playlist_internal(id: &str) -> Result<()> { PlaylistManager::get().delete_playlist(id).await } +/// Enregistre le cache audio global +/// +/// Cette fonction doit être appelée au démarrage de l'application +/// pour rendre le cache audio disponible au PlaylistManager. +/// +/// # Examples +/// +/// ```rust,ignore +/// use pmoplaylist::register_audio_cache; +/// use pmoaudiocache::Cache as AudioCache; +/// use std::sync::Arc; +/// +/// let audio_cache = Arc::new(AudioCache::new("./cache", 1000)?); +/// register_audio_cache(audio_cache); +/// ``` +pub fn register_audio_cache(cache: Arc) { + let _ = AUDIO_CACHE.set(cache); +} + /// Helper pour acc�der au cache audio pub(crate) fn audio_cache() -> Result> { - pmoupnp::get_audio_cache().ok_or_else(|| crate::Error::ManagerNotInitialized) + AUDIO_CACHE + .get() + .cloned() + .or_else(|| { + // Fallback: essayer pmoupnp si disponible + pmoupnp::get_audio_cache() + }) + .ok_or_else(|| crate::Error::ManagerNotInitialized) } /// Fonction raccourcie pour acc�der au singleton