diff --git a/PMOMusic/src/main.rs b/PMOMusic/src/main.rs index 4b55a57a..bf0570ae 100644 --- a/PMOMusic/src/main.rs +++ b/PMOMusic/src/main.rs @@ -74,7 +74,7 @@ async fn main() -> Result<(), Box> { let renderer_instance = server .write() .await - .register_device(MEDIA_RENDERER.clone()) + .register_device(MEDIA_RENDERER.clone(), true) .await .expect("Failed to register MediaRenderer"); @@ -85,7 +85,7 @@ async fn main() -> Result<(), Box> { let server_instance = server .write() .await - .register_device(MEDIA_SERVER.clone()) + .register_device(MEDIA_SERVER.clone(), true) .await .expect("Failed to register MediaServer"); diff --git a/pmoapp/webapp/src/components/unified/RendererDrawer.vue b/pmoapp/webapp/src/components/unified/RendererDrawer.vue index fa7b561c..88a82dc7 100644 --- a/pmoapp/webapp/src/components/unified/RendererDrawer.vue +++ b/pmoapp/webapp/src/components/unified/RendererDrawer.vue @@ -116,6 +116,15 @@ const offlineRenderers = computed(() => allRenderers.value.filter((r: RendererSummary) => !r.online), ); +// Noms de renderers qui apparaissent plus d'une fois (online + offline) +const duplicateNames = computed(() => { + const counts = new Map(); + for (const r of allRenderers.value) { + counts.set(r.friendly_name, (counts.get(r.friendly_name) ?? 0) + 1); + } + return new Set([...counts.entries()].filter(([, n]) => n > 1).map(([name]) => name)); +}); + function close() { emit("update:modelValue", false); } @@ -296,7 +305,7 @@ async function handleTransferQueue(event: Event, targetRendererId: string) { getProtocolLabel( renderer.protocol, ) - }} + }}{{ duplicateNames.has(renderer.friendly_name) && renderer.server_host ? ` [${renderer.server_host}]` : '' }}
@@ -383,7 +392,7 @@ async function handleTransferQueue(event: Event, targetRendererId: string) {

- {{ renderer.friendly_name }} + {{ renderer.friendly_name }}{{ duplicateNames.has(renderer.friendly_name) && renderer.server_host ? ` [${renderer.server_host}]` : '' }}

, } /// Protocole exposé par le renderer diff --git a/pmocontrol/src/pmoserver_ext.rs b/pmocontrol/src/pmoserver_ext.rs index f76ec5a6..eb5330b8 100644 --- a/pmocontrol/src/pmoserver_ext.rs +++ b/pmocontrol/src/pmoserver_ext.rs @@ -102,6 +102,13 @@ async fn list_renderers(State(state): State) -> Json) -> Json>() diff --git a/pmoupnp/src/upnp_server.rs b/pmoupnp/src/upnp_server.rs index 9ebe2d0f..467755b8 100644 --- a/pmoupnp/src/upnp_server.rs +++ b/pmoupnp/src/upnp_server.rs @@ -97,6 +97,7 @@ pub trait UpnpServerExt { async fn register_device( &mut self, device: Arc, + with_ssdp: bool, ) -> Result, DeviceError>; /// Retourne le nombre de devices enregistrés. @@ -232,6 +233,7 @@ impl UpnpServerExt for Server { async fn register_device( &mut self, device: Arc, + with_ssdp: bool, ) -> Result, DeviceError> { use tracing::info; @@ -259,8 +261,8 @@ impl UpnpServerExt for Server { .register(di.clone()) .map_err(|e| DeviceError::UrlRegistrationError(e))?; - // Annoncer via SSDP (si initialisé) - if self.ssdp_enabled() { + // Annoncer via SSDP (si initialisé et demandé) + if with_ssdp && self.ssdp_enabled() { let ssdp_opt = SSDP_SERVER.read().unwrap(); if let Some(ref ssdp) = *ssdp_opt { use crate::config_ext::UpnpConfigExt; @@ -507,7 +509,7 @@ mod tests { "Test Renderer".to_string(), )); - let instance = server.register_device(device).await.unwrap(); + let instance = server.register_device(device, false).await.unwrap(); // Vérifier que le device est dans le registre assert_eq!(server.device_count(), 1); diff --git a/pmowebrenderer/src/registry.rs b/pmowebrenderer/src/registry.rs index 7e1c81eb..7cb187b7 100644 --- a/pmowebrenderer/src/registry.rs +++ b/pmowebrenderer/src/registry.rs @@ -263,7 +263,7 @@ impl RendererRegistry { let mut server = server_arc.write().await; server - .register_device(Arc::new(device)) + .register_device(Arc::new(device), false) .await .map_err(|e| WebRendererError::RegistrationError(e.to_string()))? };