From 16bc0af965dc9f70e91624002edc786b4dd74d02 Mon Sep 17 00:00:00 2001 From: Luc Date: Sun, 9 Feb 2025 20:10:11 +0100 Subject: [PATCH] Update state handling --- app/src/chrome.rs | 31 +++++++++++++++++++++++++++++-- app/src/main.rs | 3 ++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/src/chrome.rs b/app/src/chrome.rs index 15c6925..a2daf27 100644 --- a/app/src/chrome.rs +++ b/app/src/chrome.rs @@ -14,7 +14,7 @@ use chromiumoxide::{ Browser, BrowserConfig, Page, }; -use crate::config::ChromiumConfig; +use crate::{config::ChromiumConfig, state::State}; pub struct ChromeController { pub current_playlist: Arc>>, @@ -37,7 +37,7 @@ impl ChromeController { Self::default() } - pub async fn start(&self, config: &ChromiumConfig) -> Result<()> { + pub async fn start(&self, config: &ChromiumConfig, state: &State) -> Result<()> { let home_path = std::env::var("HOME").unwrap(); let user_data_dir = format!("{}/.chromium-mission-data", home_path); let browser_config = BrowserConfig::builder() @@ -148,12 +148,27 @@ impl ChromeController { loop { if let Some(playlists) = &config.playlists { if let Some(playlist) = self.current_playlist.lock().await.as_ref() { + state.hass.playlist_entity.update_state( + &state.hass.mqtt_client, + playlist, + ); + if let Some(playlist_config) = playlists.get(playlist) { // TODO: implement playlist logic if let Some(tab) = playlist_config.tabs.get(current_tab) { if let Some(page) = pages.get(tab) { println!("Activated tab \"{}\"", tab); page.activate().await.unwrap(); + + state + .hass + .tab_entity + .update_state(&state.hass.mqtt_client, tab); + + state.hass.url_entity.update_state( + &state.hass.mqtt_client, + &config.tabs.as_ref().unwrap().get(tab).unwrap().url, + ); } else { println!("On demand activating tab \"{}\"", tab); if let Some(tab_config) = config.tabs.as_ref().unwrap().get(tab) { @@ -166,6 +181,18 @@ impl ChromeController { ) .await .unwrap(); + + // TODO: update tab entity + state + .hass + .tab_entity + .update_state(&state.hass.mqtt_client, tab); + + // TODO: update url entity + state + .hass + .url_entity + .update_state(&state.hass.mqtt_client, &tab_config.url); } else { println!("Tab \"{}\" config not found", tab); current_tab = 0; diff --git a/app/src/main.rs b/app/src/main.rs index 2231b21..75a6138 100644 --- a/app/src/main.rs +++ b/app/src/main.rs @@ -25,11 +25,12 @@ async fn main() -> Result<()> { if let Some(chromium_config) = &state.config.chromium { if chromium_config.enabled { let chromium_config_clone = chromium_config.clone(); + let state_clone = state.clone(); let chromium_2 = chromium.clone(); task::spawn(async move { - chromium_2.start(&chromium_config_clone).await.unwrap(); + chromium_2.start(&chromium_config_clone, &state_clone).await.unwrap(); }); } }