From ab81bdb70860e63f5c65d68b8f2b4168a39f9dc4 Mon Sep 17 00:00:00 2001 From: Jared Burce Date: Thu, 29 Oct 2020 03:33:26 -0700 Subject: [PATCH] send ring events even if audio is playing Multiple clients won't get events if the handler to the first one starts the audio stream before the other handlers check. Later handlers always see audio. --- src/main.rs | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index a080fc2..318a059 100644 --- a/src/main.rs +++ b/src/main.rs @@ -64,22 +64,21 @@ async fn main() { Ok::<_, Infallible>((sse::event("ping"), sse::data("")).into_a()) }), - rx.filter_map(|()| async { - if audio_busy() { - debug!("doorbell still ringing, ignoring press"); - return None; - } - debug!("Playing doorbell chime"); - match process::Command::new("mplayer") - .arg(OUTDOOR_CHIME_FILE) - .stdout(process::Stdio::null()) - .stderr(process::Stdio::null()) - .spawn() { - Ok(child) => { AUDIO_CHILD.with(|cell| cell.replace(Some(child))); }, - Err(err) => error!("Error playing outdoor chime: {}", err) - }; + rx.map(|()| { + if !audio_busy() { + trace!("Playing doorbell chime"); + match process::Command::new("mplayer") + .arg(OUTDOOR_CHIME_FILE) + .stdout(process::Stdio::null()) + .stderr(process::Stdio::null()) + .spawn() { + Ok(child) => { AUDIO_CHILD.with(|cell| cell.replace(Some(child))); }, + Err(err) => error!("Error playing outdoor chime: {}", err) + }; + } else { debug!("doorbell still ringing, not playing new chime"); } + debug!("sending ring sse"); - Some(Ok::<_, Infallible>((sse::event("ring"), sse::data("")).into_b())) + Ok::<_, Infallible>((sse::event("ring"), sse::data("")).into_b()) }) ); sse::reply(stream)