diff --git a/src/homeassistant.rs b/src/homeassistant.rs index 8ce1dd4..1d3ed9b 100644 --- a/src/homeassistant.rs +++ b/src/homeassistant.rs @@ -4,7 +4,7 @@ use eyre::{OptionExt, Result}; use futures_util::{SinkExt, StreamExt}; use reqwest::Client; use serde::Deserialize; -use serde_json::{json, Value}; +use serde_json::{json, Error, Value}; use tokio::sync::mpsc::{Receiver, Sender}; use tokio_tungstenite::{connect_async, tungstenite::protocol::Message}; use url::Url; @@ -226,42 +226,30 @@ pub async fn listen_for_events( loop { tokio::select! { event = read.next() => { - match event { - None => println!("Oh no, nothing here"), - Some(Ok(Message::Text(text))) => { - let event: serde_json::Value = serde_json::from_str(&text)?; - if let Some(entity_id) = event.get("event").and_then(|e| e.get("data")).and_then(|d| d.get("entity_id")).and_then(|e| e.as_str()) - { - if let Some(media_player) = media_players.get_mut(entity_id) { - if let Some(new_state) = event.get("event").and_then(|e| e.get("data")).and_then(|d| d.get("new_state")) { - let attr = new_state.get("attributes"); - let state = new_state.get("state"); - - if attr.is_some() && state.is_some() { - match media_player - .update_metadata( - attr.unwrap().clone(), - state.unwrap().to_string().clone(), - ) - .await { - Ok(events) => { - for e in events { - channels - .get(entity_id) - .unwrap() - .send(e) - .await?; - } - }, - Err(e) => println!("Died during metadata update event with {e}"), - }; - } - } - } + let Some(Ok(Message::Text(text))) = event else { continue }; + let Ok(event): Result = serde_json::from_str(&text) else { continue }; + let Some(entity_id) = event.get("event").and_then(|e| e.get("data")).and_then(|d| d.get("entity_id")).and_then(|e| e.as_str()) else { continue }; + let Some(media_player) = media_players.get_mut(entity_id) else { continue }; + let Some(new_state) = event.get("event").and_then(|e| e.get("data")).and_then(|d| d.get("new_state")) else { continue }; + let Some(attr) = new_state.get("attributes") else { continue }; + let Some(state) = new_state.get("state") else { continue }; + match media_player + .update_metadata( + attr.clone(), + state.to_string().clone(), + ) + .await { + Ok(events) => { + for e in events { + channels + .get(entity_id) + .unwrap() + .send(e) + .await?; } }, - _ => {}, - } + Err(e) => println!("Died during metadata update event with {e}"), + }; } Some((entity_id, msg)) = mpris_rx.recv() => { let media = media_players.get_mut(&entity_id);