From 5680eb3ab20e5bd508586246e19e7650772b5296 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 5 Mar 2022 19:44:03 +0100 Subject: [PATCH] Rename backend to client and simplify event handling --- cove-tui/src/backend.rs | 6 --- cove-tui/src/client.rs | 1 + cove-tui/src/{backend => client}/cove.rs | 0 cove-tui/src/{backend => client}/cove/conn.rs | 0 cove-tui/src/{backend => client}/cove/room.rs | 23 +++++------ cove-tui/src/main.rs | 2 +- cove-tui/src/ui.rs | 40 +++++++++---------- cove-tui/src/ui/cove.rs | 2 +- cove-tui/src/ui/cove/users.rs | 2 +- 9 files changed, 34 insertions(+), 42 deletions(-) delete mode 100644 cove-tui/src/backend.rs create mode 100644 cove-tui/src/client.rs rename cove-tui/src/{backend => client}/cove.rs (100%) rename cove-tui/src/{backend => client}/cove/conn.rs (100%) rename cove-tui/src/{backend => client}/cove/room.rs (88%) diff --git a/cove-tui/src/backend.rs b/cove-tui/src/backend.rs deleted file mode 100644 index b4e8bd7..0000000 --- a/cove-tui/src/backend.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod cove; - -#[derive(Debug)] -pub enum Event { - Cove(String, cove::conn::Event), -} diff --git a/cove-tui/src/client.rs b/cove-tui/src/client.rs new file mode 100644 index 0000000..bbd7d92 --- /dev/null +++ b/cove-tui/src/client.rs @@ -0,0 +1 @@ +pub mod cove; diff --git a/cove-tui/src/backend/cove.rs b/cove-tui/src/client/cove.rs similarity index 100% rename from cove-tui/src/backend/cove.rs rename to cove-tui/src/client/cove.rs diff --git a/cove-tui/src/backend/cove/conn.rs b/cove-tui/src/client/cove/conn.rs similarity index 100% rename from cove-tui/src/backend/cove/conn.rs rename to cove-tui/src/client/cove/conn.rs diff --git a/cove-tui/src/backend/cove/room.rs b/cove-tui/src/client/cove/room.rs similarity index 88% rename from cove-tui/src/backend/cove/room.rs rename to cove-tui/src/client/cove/room.rs index 44a897b..2016b37 100644 --- a/cove-tui/src/backend/cove/room.rs +++ b/cove-tui/src/client/cove/room.rs @@ -8,8 +8,7 @@ use tokio::sync::{Mutex, MutexGuard}; use crate::config::Config; use crate::never::Never; -use super::super::Event; -use super::conn::{self, CoveConn, CoveConnMt}; +use super::conn::{self, CoveConn, CoveConnMt, Event}; struct ConnConfig { url: String, @@ -40,14 +39,15 @@ pub struct CoveRoom { } impl CoveRoom { - pub async fn new( + pub async fn new( config: &'static Config, - outer_ev_tx: UnboundedSender, name: String, + event_sender: UnboundedSender, + convert_event: F, ) -> Self where E: Send + 'static, - Event: Into, + F: Fn(&str, Event) -> E + Send + 'static, { let (ev_tx, ev_rx) = mpsc::unbounded_channel(); let (tx, rx) = oneshot::channel(); @@ -70,7 +70,7 @@ impl CoveRoom { tokio::spawn(async move { tokio::select! { _ = rx => {} // Watch dead man's switch - _ = Self::shovel_events(ev_rx, outer_ev_tx, name) => {} + _ = Self::shovel_events(name, ev_rx, event_sender, convert_event) => {} _ = Self::run(conn_clone, mt, conf) => {} } }); @@ -88,15 +88,14 @@ impl CoveRoom { } async fn shovel_events( + name: String, mut ev_rx: UnboundedReceiver, ev_tx: UnboundedSender, - name: String, - ) where - Event: Into, - { + convert_event: impl Fn(&str, Event) -> E, + ) { while let Some(event) = ev_rx.recv().await { - let event = Event::Cove(name.clone(), event); - if ev_tx.send(event.into()).is_err() { + let event = convert_event(&name, event); + if ev_tx.send(event).is_err() { break; } } diff --git a/cove-tui/src/main.rs b/cove-tui/src/main.rs index 77831aa..7518e77 100644 --- a/cove-tui/src/main.rs +++ b/cove-tui/src/main.rs @@ -1,6 +1,6 @@ #![warn(clippy::use_self)] -pub mod backend; +pub mod client; mod config; mod never; mod ui; diff --git a/cove-tui/src/ui.rs b/cove-tui/src/ui.rs index 56e23bf..35a6ede 100644 --- a/cove-tui/src/ui.rs +++ b/cove-tui/src/ui.rs @@ -11,9 +11,7 @@ use std::collections::hash_map::Entry; use std::collections::HashMap; use std::io::Stdout; -use crossterm::event::{ - Event as CEvent, EventStream, KeyCode, KeyEvent, MouseEvent, MouseEventKind, -}; +use crossterm::event::{Event, EventStream, KeyCode, KeyEvent, MouseEvent, MouseEventKind}; use futures::StreamExt; use tokio::sync::mpsc::error::TryRecvError; use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; @@ -21,9 +19,8 @@ use tui::backend::CrosstermBackend; use tui::layout::{Constraint, Direction, Layout, Rect}; use tui::{Frame, Terminal}; -use crate::backend::cove::conn::Event as CoveEvent; -use crate::backend::cove::room::CoveRoom; -use crate::backend::Event as BEvent; +use crate::client::cove::conn::Event as CoveEvent; +use crate::client::cove::room::CoveRoom; use crate::config::Config; use crate::ui::overlays::OverlayReaction; @@ -42,14 +39,13 @@ pub enum RoomId { #[derive(Debug)] pub enum UiEvent { - Term(CEvent), - Room(BEvent), - Redraw, + Term(Event), + Cove(String, CoveEvent), } -impl From for UiEvent { - fn from(event: BEvent) -> Self { - Self::Room(event) +impl UiEvent { + fn cove(room: &str, event: CoveEvent) -> Self { + Self::Cove(room.to_string(), event) } } @@ -142,13 +138,10 @@ impl Ui { }; loop { let result = match event { - UiEvent::Term(CEvent::Key(event)) => self.handle_key_event(event).await?, - UiEvent::Term(CEvent::Mouse(event)) => self.handle_mouse_event(event).await?, - UiEvent::Term(CEvent::Resize(_, _)) => EventHandleResult::Continue, - UiEvent::Room(BEvent::Cove(name, event)) => { - self.handle_cove_event(name, event).await? - } - UiEvent::Redraw => EventHandleResult::Continue, + UiEvent::Term(Event::Key(event)) => self.handle_key_event(event).await?, + UiEvent::Term(Event::Mouse(event)) => self.handle_mouse_event(event).await?, + UiEvent::Term(Event::Resize(_, _)) => EventHandleResult::Continue, + UiEvent::Cove(name, event) => self.handle_cove_event(name, event).await?, }; match result { EventHandleResult::Continue => {} @@ -332,8 +325,13 @@ impl Ui { match &id { RoomId::Cove(name) => { if let Entry::Vacant(entry) = self.cove_rooms.entry(name.clone()) { - let room = - CoveRoom::new(self.config, self.event_tx.clone(), name.clone()).await; + let room = CoveRoom::new( + self.config, + name.clone(), + self.event_tx.clone(), + UiEvent::cove, + ) + .await; entry.insert(CoveUi::new(room)); } } diff --git a/cove-tui/src/ui/cove.rs b/cove-tui/src/ui/cove.rs index 159d353..c5fef1f 100644 --- a/cove-tui/src/ui/cove.rs +++ b/cove-tui/src/ui/cove.rs @@ -6,7 +6,7 @@ use tui::text::Span; use tui::widgets::{Block, BorderType, Borders, Paragraph}; use tui::Frame; -use crate::backend::cove::room::CoveRoom; +use crate::client::cove::room::CoveRoom; use self::users::CoveUsers; diff --git a/cove-tui/src/ui/cove/users.rs b/cove-tui/src/ui/cove/users.rs index 1357afd..2927a23 100644 --- a/cove-tui/src/ui/cove/users.rs +++ b/cove-tui/src/ui/cove/users.rs @@ -7,7 +7,7 @@ use tui::layout::Rect; use tui::text::{Span, Spans}; use tui::widgets::{Paragraph, Widget}; -use crate::backend::cove::conn::Present; +use crate::client::cove::conn::Present; use crate::ui::styles; #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]