//! Registre centralisé des caches pour le serveur UPnP (couche de compatibilité) //! //! Ce module fournit une couche de compatibilité pour pmosource qui utilise //! les singletons de pmoaudiocache et pmocovers pour accéder aux caches. use pmoaudiocache::Cache as AudioCache; use pmocache::FileCache; use pmocovers::Cache as CoverCache; use std::sync::Arc; /// Accès global au cache de couvertures /// /// # Examples /// /// ```rust,ignore /// use pmoupnp::cache_registry::get_cover_cache; /// /// if let Some(cache) = get_cover_cache() { /// let pk = cache.add_from_url("http://example.com/cover.jpg").await?; /// } /// ``` pub fn get_cover_cache() -> Option> { pmocovers::get_cover_cache() } /// Accès global au cache audio /// /// # Examples /// /// ```rust,ignore /// use pmoupnp::cache_registry::get_audio_cache; /// /// if let Some(cache) = get_audio_cache() { /// let (pk, _) = cache.add_from_url("http://example.com/track.flac", None).await?; /// } /// ``` pub fn get_audio_cache() -> Option> { pmoaudiocache::get_audio_cache() } /// Construit l'URL complète pour une couverture /// /// # Arguments /// /// * `pk` - Clé primaire de la couverture /// * `size` - Taille optionnelle de l'image /// /// # Examples /// /// ```rust,ignore /// use pmoupnp::cache_registry::build_cover_url; /// /// let url = build_cover_url("abc123", Some(300))?; /// // url = "http://localhost:8080/covers/images/abc123/300" /// ``` pub fn build_cover_url(pk: &str, size: Option) -> anyhow::Result { // Récupérer l'URL de base depuis la variable d'environnement ou une config let base_url = std::env::var("PMO_SERVER_URL") .unwrap_or_else(|_| "http://localhost:8080".to_string()); let cache = get_cover_cache() .ok_or_else(|| anyhow::anyhow!("No registered cover cache"))?; let param = match size { Some(size_) => Some(size_.to_string()), None => None, }; let route = cache.route_for(pk, param.as_deref()); Ok(format!("{}{}", base_url, route)) } /// Construit l'URL complète pour une piste audio /// /// # Arguments /// /// * `pk` - Clé primaire de la piste /// * `param` - Paramètre optionnel (ex: "orig", "stream") /// /// # Examples /// /// ```rust,ignore /// use pmoupnp::cache_registry::build_audio_url; /// /// let url = build_audio_url("abc123", Some("stream"))?; /// // url = "http://localhost:8080/audio/tracks/abc123/stream" /// ``` pub fn build_audio_url(pk: &str, param: Option<&str>) -> anyhow::Result { // Récupérer l'URL de base depuis la variable d'environnement ou une config let base_url = std::env::var("PMO_SERVER_URL") .unwrap_or_else(|_| "http://localhost:8080".to_string()); let cache = get_audio_cache() .ok_or_else(|| anyhow::anyhow!("No registered audio cache"))?; let route = cache.route_for(pk, param); Ok(format!("{}{}", base_url, route)) }