diff --git a/backend/src/tasks/lights/scripts/daylight.rs b/backend/src/tasks/lights/scripts/daylight.rs new file mode 100644 index 0000000..37a1ed2 --- /dev/null +++ b/backend/src/tasks/lights/scripts/daylight.rs @@ -0,0 +1,60 @@ +use std::{collections::HashMap, sync::Arc}; + +use common::{BulbPrefs, Param}; +use lighter_lib::BulbId; +use lighter_manager::manager::BulbManager; +use std::sync::Mutex; + +use crate::util::DeadMansHandle; + +use super::LightScript; + +pub struct Auto { + state: Arc>, + _task_handle: DeadMansHandle, +} + +struct AutoState { + manager: BulbManager, + enabled_bulbs: HashMap, +} + +#[derive(Default)] +struct AutoBulbState {} + +impl LightScript for Auto { + fn get_params(&mut self, bulb: &BulbId) -> BulbPrefs { + let state = self.state.lock().unwrap(); + let enabled = state.enabled_bulbs.contains_key(bulb); + + BulbPrefs { + kvs: [("Auto".to_string(), Param::Toggle(enabled))] + .into_iter() + .collect(), + } + } + + fn set_param(&mut self, bulb: &BulbId, name: &str, param: Param) { + if name != "Auto" { + error!("invalid param name"); + return; + } + + let Param::Toggle(enabled) = param else { + error!("invalid param kind"); + return; + }; + + let mut state = self.state.lock().unwrap(); + if !enabled { + state.enabled_bulbs.remove(bulb); + } else { + let bulb_state = AutoBulbState::default(); + state.enabled_bulbs.insert(bulb.clone(), bulb_state); + } + } +} + +async fn auto_task(state: Arc>) { + loop {} +} diff --git a/backend/src/tasks/lights/scripts/mod.rs b/backend/src/tasks/lights/scripts/mod.rs index e7c730d..8a25f82 100644 --- a/backend/src/tasks/lights/scripts/mod.rs +++ b/backend/src/tasks/lights/scripts/mod.rs @@ -1,8 +1,10 @@ use common::{BulbPrefs, Param}; use lighter_lib::BulbId; +mod daylight; mod party; mod waker; +pub use daylight::Daylight; pub use party::Party; pub use waker::Waker;