From 6bfc1ee008b4d9e23d6e90ce5436b7dfcf8e4868 Mon Sep 17 00:00:00 2001 From: clerie <git@clerie.de> Date: Sun, 30 Mar 2025 13:58:38 +0200 Subject: [PATCH] Display on air state --- src/main.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index ef8a213..9346cc9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ use std::{ }, collections::{ HashMap, + HashSet, }, rc::{ Rc, @@ -27,6 +28,8 @@ fn main() -> Result<()> { let nodes: Rc<RefCell<HashMap<u32, Box<dyn pw::proxy::ProxyT>>>> = Rc::new(RefCell::new(HashMap::new())); let listeners: Rc<RefCell<HashMap<u32, Vec<Box<dyn pw::proxy::Listener>>>>> = Rc::new(RefCell::new(HashMap::new())); + let running_cameras: Rc<RefCell<HashSet<u32>>> = Rc::new(RefCell::new(HashSet::new())); + // Listen for new nodes let _registry_listener = registry .add_listener_local() @@ -37,12 +40,34 @@ fn main() -> Result<()> { let node: pw::node::Node = registry.bind(obj).unwrap(); + let running_cameras_weak = Rc::downgrade(&running_cameras); + // Listen for camera node changes let node_listener = node .add_listener_local() - .info(|info| { + .info(move |info| { + + if let Some(running_cameras) = running_cameras_weak.upgrade() { + let cameras_are_running_before = running_cameras.borrow_mut().len() > 0; + + if let pw::node::NodeState::Running = info.state() { + running_cameras.borrow_mut().insert(info.id()); + } + else { + running_cameras.borrow_mut().remove(&info.id()); + } + + let cameras_are_running_after = running_cameras.borrow_mut().len() > 0; + if cameras_are_running_before != cameras_are_running_after { + if cameras_are_running_after { + println!("On air"); + } + else { + println!("Off air"); + } + } + } - println!("{}: {:?}", info.id(), info.state()); }) .register();