properties: rewrite properties (whoops)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::task::Task;
|
||||
use crate::events::*;
|
||||
use crate::properties::*;
|
||||
use paste::paste;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
struct Scene {
|
||||
@@ -13,7 +13,7 @@ struct Scene {
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
enum Trigger {
|
||||
Startup,
|
||||
PropertyEquals(&'static str, Variant)
|
||||
PropertyEquals(PropertyID, Variant)
|
||||
}
|
||||
|
||||
pub struct Sequencer {
|
||||
@@ -34,7 +34,7 @@ impl Sequencer {
|
||||
Scene {
|
||||
name: "Online",
|
||||
patterns: vec!["Idle"],
|
||||
trigger: Trigger::PropertyEquals("system.network.online", Variant::Boolean(true))
|
||||
trigger: Trigger::PropertyEquals(prop_id!(System::NetworkOnline), Variant::Boolean(true))
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -78,34 +78,53 @@ impl Sequencer {
|
||||
}
|
||||
}
|
||||
|
||||
pub mod props {
|
||||
use crate::property_namespace;
|
||||
|
||||
property_namespace!(
|
||||
Scenes,
|
||||
Current => "",
|
||||
All => Vec::new()
|
||||
);
|
||||
}
|
||||
|
||||
use crate::scenes::props::Scenes;
|
||||
|
||||
impl Task for Sequencer {
|
||||
fn start(&mut self, bus: &mut EventBus) {
|
||||
log::info!("Starting sequencer!!!");
|
||||
|
||||
let startup_scene = self.scenes.iter().filter(|i| { i.trigger == Trigger::Startup }).next().unwrap();
|
||||
bus.push(Event::new_property_change("scenes.current", startup_scene.name));
|
||||
bus.set_property(Scenes::Current, startup_scene.name);
|
||||
let mut scene_list = Vec::new();
|
||||
for scene in self.scenes.iter() {
|
||||
scene_list.push(Variant::String(scene.name.to_string()));
|
||||
}
|
||||
|
||||
bus.set_property(Scenes::All, scene_list);
|
||||
}
|
||||
|
||||
fn on_property_change(&mut self, key: &'static str, value: &Variant, bus: &mut EventBus) {
|
||||
fn on_property_change(&mut self, key: PropertyID, value: &Variant, bus: &mut EventBus) {
|
||||
match (key, value) {
|
||||
("scenes.current", Variant::String(scene_name)) => {
|
||||
(prop_id!(Scenes::Current), Variant::String(ref scene_name)) => {
|
||||
log::info!("Applying scene");
|
||||
self.apply_scene(scene_name, bus);
|
||||
},
|
||||
(key, value) => {
|
||||
for scene in self.scenes.iter() {
|
||||
/*for scene in self.scenes.iter() {
|
||||
match scene.trigger {
|
||||
Trigger::PropertyEquals(trigger_key, ref trigger_value) => {
|
||||
if trigger_key == key && trigger_value == value {
|
||||
log::info!("Triggering scene {}", scene.name);
|
||||
bus.push(Event::new_property_change("scenes.current", scene.name))
|
||||
bus.push(Scenes::Current.new_property_change(scene.name))
|
||||
}
|
||||
},
|
||||
_ => ()
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
_ => ()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
use crate::prop_id;
|
Reference in New Issue
Block a user