media_server_client/
media_server_client.rs

1use futures_util::StreamExt;
2use upnp_client::{
3    device_client::DeviceClient, discovery::discover_pnp_locations,
4    media_server::MediaServerClient, types::Device,
5};
6
7const KODI_MEDIA_SERVER: &str = "Kodi - Media Server";
8
9#[tokio::main]
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11    let devices = discover_pnp_locations().await?;
12    tokio::pin!(devices);
13
14    let mut kodi_device: Option<Device> = None;
15    while let Some(device) = devices.next().await {
16        // Select the first Kodi device found
17        if device.model_description == Some(KODI_MEDIA_SERVER.to_string()) {
18            kodi_device = Some(device);
19            break;
20        }
21    }
22
23    let kodi_device = kodi_device.unwrap();
24    let device_client = DeviceClient::new(&kodi_device.location)?.connect().await?;
25    let media_server_client = MediaServerClient::new(device_client);
26    let results = media_server_client
27        .browse("0", "BrowseDirectChildren")
28        .await?;
29    println!("{:#?}", results);
30    Ok(())
31}