replace broadcast with mpsc

This commit is contained in:
Dr. Matthias Ratajczak
2023-03-03 14:01:34 +01:00
parent bd0c831aae
commit c5c0ef0f82
3 changed files with 12 additions and 12 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ mod ui;
use std::process::ExitCode; use std::process::ExitCode;
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use tokio::sync::broadcast::channel; use tokio::sync::mpsc::channel;
use tokio::task::JoinSet; use tokio::task::JoinSet;
use message::Message; use message::Message;
+2 -2
View File
@@ -4,7 +4,7 @@ use std::time::Duration;
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use crossterm::{cursor::MoveTo, QueueableCommand}; use crossterm::{cursor::MoveTo, QueueableCommand};
use tokio::sync::broadcast::Receiver; use tokio::sync::mpsc::Receiver;
use tokio::time::sleep; use tokio::time::sleep;
use crate::interval::Interval; use crate::interval::Interval;
@@ -103,7 +103,7 @@ impl Pomodoro {
Ok(false) Ok(false)
}, },
message = self.receiver.recv() => { message = self.receiver.recv() => {
if let Ok(m) = message { if let Some(m) = message {
match m { match m {
Message::Quit => Ok(true), Message::Quit => Ok(true),
Message::TogglePause => { Message::TogglePause => {
+9 -9
View File
@@ -9,7 +9,7 @@ use crossterm::{
ExecutableCommand, QueueableCommand, ExecutableCommand, QueueableCommand,
}; };
use futures::StreamExt; use futures::StreamExt;
use tokio::sync::broadcast::Sender; use tokio::sync::mpsc::Sender;
use crate::message::Message; use crate::message::Message;
@@ -30,7 +30,7 @@ impl Ui {
stdout().execute(cursor::Hide)?; stdout().execute(cursor::Hide)?;
if let Some(Ok(Event::Key(key_event))) = reader.next().await { 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 { if should_exit {
return Ok(()); return Ok(());
}; };
@@ -38,24 +38,24 @@ impl Ui {
} }
} }
fn handle_key_event(&self, key_event: crossterm::event::KeyEvent) -> Result<bool> { async fn handle_key_event(&self, key_event: crossterm::event::KeyEvent) -> Result<bool> {
if Self::is_char_q(key_event) { if Self::is_char_q(key_event) {
self.prepare_for_program_quit()?; self.prepare_for_program_quit().await?;
return Ok(true); return Ok(true);
}; };
if Self::is_ctrl_c(key_event) { if Self::is_ctrl_c(key_event) {
self.prepare_for_program_quit()?; self.prepare_for_program_quit().await?;
self.sender.send(Message::Quit)?; self.sender.send(Message::Quit).await?;
bail!("<Ctrl-C>"); bail!("<Ctrl-C>");
} }
if Self::is_space(key_event) { if Self::is_space(key_event) {
self.sender.send(Message::TogglePause)?; self.sender.send(Message::TogglePause).await?;
} }
Ok(false) Ok(false)
} }
fn prepare_for_program_quit(&self) -> Result<()> { async fn prepare_for_program_quit(&self) -> Result<()> {
self.sender.send(Message::Quit)?; self.sender.send(Message::Quit).await?;
disable_raw_mode()?; disable_raw_mode()?;
stdout().execute(cursor::Show)?; stdout().execute(cursor::Show)?;
Ok(()) Ok(())