replace broadcast with mpsc
This commit is contained in:
+1
-1
@@ -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
@@ -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,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(())
|
||||
|
||||
Reference in New Issue
Block a user