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 anyhow::{bail, Result};
use tokio::sync::broadcast::channel;
use tokio::sync::mpsc::channel;
use tokio::task::JoinSet;
use message::Message;
+2 -2
View File
@@ -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 => {
+9 -9
View File
@@ -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<bool> {
async fn handle_key_event(&self, key_event: crossterm::event::KeyEvent) -> Result<bool> {
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!("<Ctrl-C>");
}
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(())