diff --git a/pmocontrol/src/pmoserver_ext.rs b/pmocontrol/src/pmoserver_ext.rs index 4b741077..b73bce8c 100644 --- a/pmocontrol/src/pmoserver_ext.rs +++ b/pmocontrol/src/pmoserver_ext.rs @@ -196,7 +196,7 @@ async fn get_renderer_full_snapshot( let base_url_str = pmoserver::get_base_url_from_request(&headers); let base_url = pmoserver::BaseUrl(base_url_str); - // Transform cover URLs in current_track + // Transform cover URLs in current_track using async version if let Some(ref mut current_track) = snapshot.state.current_track { if let Some(ref album_art) = current_track.album_art_uri { if let Some(transformed) = transform_cover_url(Some(album_art), &base_url).await { @@ -241,7 +241,7 @@ async fn get_renderer_queue( let base_url_str = pmoserver::get_base_url_from_request(&headers); let base_url = pmoserver::BaseUrl(base_url_str); - // Transform cover URLs in all queue items + // Transform cover URLs in all queue items using async version for item in &mut snapshot.queue.items { if let Some(ref album_art) = item.album_art_uri { if let Some(transformed) = transform_cover_url(Some(album_art), &base_url).await { diff --git a/pmocontrol/src/sse.rs b/pmocontrol/src/sse.rs index 546f70af..0e79cf7f 100644 --- a/pmocontrol/src/sse.rs +++ b/pmocontrol/src/sse.rs @@ -73,7 +73,7 @@ async fn transform_cover_url(url: Option<&str>, base_url: &pmoserver::BaseUrl) - /// Transforme une URL de cover pour qu'elle soit accessible depuis le client (version synchrone) /// -/// Utilise la version sync de proxy_cover_url directement. +/// Utilise un thread séparé avec son propre runtime tokio. #[cfg(feature = "pmoserver")] fn transform_cover_url_sync(url: Option<&str>, base_url: &pmoserver::BaseUrl) -> Option { let url = url?; @@ -88,13 +88,20 @@ fn transform_cover_url_sync(url: Option<&str>, base_url: &pmoserver::BaseUrl) -> return Some(url.to_string()); } - // Pour les autres URLs, utiliser proxy_cover_url_sync - match pmocovers::proxy_cover_url_sync(url, base_url) { - Ok(local_url) => Some(local_url), - Err(e) => { - tracing::warn!("Failed to proxy cover URL {}: {}", url, e); - Some(url.to_string()) - } + // Pour les autres URLs, utiliser un thread avec runtime + let url_owned = url.to_string(); + let base_url_owned = base_url.0.clone(); + + let result = std::thread::spawn(move || { + let runtime = tokio::runtime::Runtime::new().unwrap(); + runtime.block_on(async move { + pmocovers::proxy_cover_url(&url_owned, &pmoserver::BaseUrl(base_url_owned)).await + }) + }).join(); + + match result { + Ok(Ok(local_url)) => Some(local_url), + _ => Some(url.to_string()) } }