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