use anyhow::{Context, Result};
pub async fn run(json: bool) -> Result<()> {
let tvs = framesmith::discover().await.context("discovery failed")?;
if json {
let items: Vec<serde_json::Value> = tvs
.iter()
.map(|tv| {
serde_json::json!({
"name": tv.name(),
"ip": tv.ip().to_string(),
"model": tv.model(),
})
})
.collect();
println!("{}", serde_json::to_string_pretty(&items)?);
} else if tvs.is_empty() {
println!("No Samsung Frame TVs found on the network.");
} else {
let name_w = tvs.iter().map(|t| t.name().len()).max().unwrap_or(4).max(4);
let ip_w = tvs
.iter()
.map(|t| t.ip().to_string().len())
.max()
.unwrap_or(2)
.max(2);
println!("{:<name_w$} {:<ip_w$} MODEL", "NAME", "IP",);
for tv in &tvs {
println!("{:<name_w$} {:<ip_w$} {}", tv.name(), tv.ip(), tv.model(),);
}
}
Ok(())
}