diff --git a/src/main.rs b/src/main.rs index 507020c..aa93bd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ mod ui; use std::process::ExitCode; use anyhow::{bail, Result}; -use tokio::sync::broadcast::channel; +use tokio::sync::mpsc::channel; use tokio::task::JoinSet; use message::Message; diff --git a/src/pomodoro.rs b/src/pomodoro.rs index f5dda79..e0f2f40 100644 --- a/src/pomodoro.rs +++ b/src/pomodoro.rs @@ -4,7 +4,7 @@ use std::time::Duration; use anyhow::{bail, Result}; use crossterm::{cursor::MoveTo, QueueableCommand}; -use tokio::sync::broadcast::Receiver; +use tokio::sync::mpsc::Receiver; use tokio::time::sleep; use crate::interval::Interval; @@ -103,7 +103,7 @@ impl Pomodoro { Ok(false) }, message = self.receiver.recv() => { - if let Ok(m) = message { + if let Some(m) = message { match m { Message::Quit => Ok(true), Message::TogglePause => { diff --git a/src/ui.rs b/src/ui.rs index 5da2752..2e31b16 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -9,7 +9,7 @@ use crossterm::{ ExecutableCommand, QueueableCommand, }; use futures::StreamExt; -use tokio::sync::broadcast::Sender; +use tokio::sync::mpsc::Sender; use crate::message::Message; @@ -30,7 +30,7 @@ impl Ui { stdout().execute(cursor::Hide)?; if let Some(Ok(Event::Key(key_event))) = reader.next().await { - let should_exit = self.handle_key_event(key_event)?; + let should_exit = self.handle_key_event(key_event).await?; if should_exit { return Ok(()); }; @@ -38,24 +38,24 @@ impl Ui { } } - fn handle_key_event(&self, key_event: crossterm::event::KeyEvent) -> Result { + async fn handle_key_event(&self, key_event: crossterm::event::KeyEvent) -> Result { if Self::is_char_q(key_event) { - self.prepare_for_program_quit()?; + self.prepare_for_program_quit().await?; return Ok(true); }; if Self::is_ctrl_c(key_event) { - self.prepare_for_program_quit()?; - self.sender.send(Message::Quit)?; + self.prepare_for_program_quit().await?; + self.sender.send(Message::Quit).await?; bail!(""); } if Self::is_space(key_event) { - self.sender.send(Message::TogglePause)?; + self.sender.send(Message::TogglePause).await?; } Ok(false) } - fn prepare_for_program_quit(&self) -> Result<()> { - self.sender.send(Message::Quit)?; + async fn prepare_for_program_quit(&self) -> Result<()> { + self.sender.send(Message::Quit).await?; disable_raw_mode()?; stdout().execute(cursor::Show)?; Ok(())