diff --git a/README.md b/README.md index 8c07d80..d6769ee 100644 --- a/README.md +++ b/README.md @@ -132,3 +132,4 @@ Memory: 31731MiB (~32GiB) - Tree format output for duplicate file listing - GUI - Packages for different operating system repositories (currently only installable via cargo) + - TUI: Improve Key Handling diff --git a/src/app.rs b/src/app.rs index 978f944..7345cc6 100644 --- a/src/app.rs +++ b/src/app.rs @@ -4,19 +4,22 @@ use std::sync::Arc; use anyhow::Result; use threadpool::ThreadPool; -use crate::pipeline::{Message, Server}; +use crate::params::Params; +use crate::server::{Message, Server}; use crate::tui::Tui; pub struct App { tpool: ThreadPool, server: Arc, + app_opts: Arc, } impl App { - pub fn new() -> Self { + pub fn new(app_opts: Arc) -> Self { Self { tpool: ThreadPool::new(8), server: Arc::new(Server::new().expect("server init failed")), + app_opts, } } @@ -25,7 +28,8 @@ impl App { let (app_tx, app_rx) = channel::(); let server_ptr = self.server.clone(); - let ui = Tui::new(app_tx); + let tui_server_ptr = self.server.clone(); + let ui = Tui::new(app_tx, tui_server_ptr); self.tpool.execute(move || { server_ptr.start(server_rx).expect("server init failed"); diff --git a/src/main.rs b/src/main.rs index 3235fab..651e57e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,20 +8,21 @@ mod scanner; /* version 2.0 modules*/ mod cli; -mod pipeline; +mod server; mod tui; use anyhow::Result; use self::app::App; -// use clap::Parser; +use clap::Parser; +use params::Params; +use std::sync::Arc; // use formatter::Formatter; -// use params::Params; // use processor::Processor; // use scanner::Scanner; fn main() -> Result<()> { - // let app_args = Params::parse(); + let app_args = Params::parse(); // let scan_results = Scanner::build(&app_args)?.scan()?; // let processor = Processor::new(scan_results); // let results = processor.sizewise()?.hashwise()?; @@ -31,7 +32,9 @@ fn main() -> Result<()> { // true => interactive::init(results.files, &app_args)?, // } - App::new().start().expect("app init failed."); + App::new(Arc::new(app_args)) + .start() + .expect("app init failed."); Ok(()) } diff --git a/src/pipeline/file.rs b/src/server/file.rs similarity index 100% rename from src/pipeline/file.rs rename to src/server/file.rs diff --git a/src/pipeline/flags.rs b/src/server/flags.rs similarity index 100% rename from src/pipeline/flags.rs rename to src/server/flags.rs diff --git a/src/pipeline/mod.rs b/src/server/mod.rs similarity index 100% rename from src/pipeline/mod.rs rename to src/server/mod.rs diff --git a/src/pipeline/processor.rs b/src/server/processor.rs similarity index 100% rename from src/pipeline/processor.rs rename to src/server/processor.rs diff --git a/src/pipeline/scanner.rs b/src/server/scanner.rs similarity index 96% rename from src/pipeline/scanner.rs rename to src/server/scanner.rs index a2ba53d..e62ce1c 100644 --- a/src/pipeline/scanner.rs +++ b/src/server/scanner.rs @@ -1,7 +1,6 @@ use super::{FileQueue, Message}; -use anyhow::{anyhow, Result}; +use anyhow::Result; use std::fs; -use std::sync::atomic::{AtomicU32, Ordering::Relaxed}; use std::sync::mpsc::{self, Receiver}; use std::sync::Arc; use std::sync::Mutex; diff --git a/src/pipeline/store.rs b/src/server/store.rs similarity index 100% rename from src/pipeline/store.rs rename to src/server/store.rs diff --git a/src/tui/mod.rs b/src/tui/mod.rs index 24bd42a..6a68d97 100644 --- a/src/tui/mod.rs +++ b/src/tui/mod.rs @@ -6,15 +6,17 @@ use ratatui::crossterm::event::{self, Event, KeyCode}; use ratatui::widgets::Paragraph; use ratatui::{DefaultTerminal, Frame}; -use crate::pipeline::Message; +use crate::server::{Message, Server}; +use std::sync::Arc; pub struct Tui { app_tx: Sender, + server: Arc, } impl Tui { - pub fn new(app_tx: Sender) -> Self { - Self { app_tx } + pub fn new(app_tx: Sender, server: Arc) -> Self { + Self { app_tx, server } } pub fn start(&self) -> Result<()> { @@ -26,7 +28,7 @@ impl Tui { } fn poll_events() -> Result { - match event::poll(Duration::from_millis(250)).context("event polling failed.")? { + match event::poll(Duration::from_millis(50)).context("event polling failed.")? { true => match event::read().context("event read failed.")? { Event::Key(key) => match key.code { KeyCode::Char('q') => Ok(Message::Exit), @@ -39,8 +41,6 @@ impl Tui { } fn handle_events(&self) -> Result { - let handleable_event = Self::poll_events(); - match Self::poll_events() { Ok(Message::Exit) => { self.app_tx @@ -52,13 +52,13 @@ impl Tui { } } - fn draw(frame: &mut Frame) { + fn draw(&self, frame: &mut Frame) { frame.render_widget(Paragraph::new("Hello, World"), frame.area()); } fn run(&self, mut terminal: DefaultTerminal) -> Result<()> { loop { - terminal.draw(Self::draw)?; + terminal.draw(|f| self.draw(f))?; match self.handle_events() { Ok(Message::Exit) => break, _ => {}