From 79c0c2be3d53f76239d8a7c57319992d368ee4c3 Mon Sep 17 00:00:00 2001 From: sreedevk Date: Mon, 7 Jul 2025 13:33:24 +0000 Subject: [PATCH] render filequeue --- src/app.rs | 13 +++++++++++-- src/server/mod.rs | 8 ++++---- src/tui/mod.rs | 24 ++++++++++++++++++------ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/app.rs b/src/app.rs index 7345cc6..93e2114 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,7 +1,7 @@ use std::sync::mpsc::{channel, Receiver, Sender}; use std::sync::Arc; -use anyhow::Result; +use anyhow::{anyhow, Result}; use threadpool::ThreadPool; use crate::params::Params; @@ -29,7 +29,14 @@ impl App { let server_ptr = self.server.clone(); let tui_server_ptr = self.server.clone(); - let ui = Tui::new(app_tx, tui_server_ptr); + let mut ui = Tui::new(app_tx.clone(), tui_server_ptr); + let root_dir = self + .app_opts + .get_directory()? + .into_os_string() + .into_string() + .map_err(|_| anyhow!("path to str conv failed"))? + .into_boxed_str(); self.tpool.execute(move || { server_ptr.start(server_rx).expect("server init failed"); @@ -51,6 +58,8 @@ impl App { } }); + app_tx.send(Message::AddScanDirectory(root_dir))?; + self.tpool.join(); Ok(()) diff --git a/src/server/mod.rs b/src/server/mod.rs index 0bee002..12e176e 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,4 +1,4 @@ -mod file; +pub mod file; mod flags; mod processor; mod scanner; @@ -26,9 +26,9 @@ pub enum Message { } pub struct Server { - fq: FileQueue, - dupstore: Arc, - tpool: ThreadPool, + pub fq: FileQueue, + pub dupstore: Arc, + pub tpool: ThreadPool, } impl Server { diff --git a/src/tui/mod.rs b/src/tui/mod.rs index 6a68d97..4c7a9cc 100644 --- a/src/tui/mod.rs +++ b/src/tui/mod.rs @@ -3,9 +3,10 @@ use std::time::Duration; use anyhow::{Context, Result}; use ratatui::crossterm::event::{self, Event, KeyCode}; -use ratatui::widgets::Paragraph; +use ratatui::widgets::{Block, Borders, List, ListItem, ListState, Paragraph}; use ratatui::{DefaultTerminal, Frame}; +use crate::server::file::FileMeta; use crate::server::{Message, Server}; use std::sync::Arc; @@ -19,7 +20,7 @@ impl Tui { Self { app_tx, server } } - pub fn start(&self) -> Result<()> { + pub fn start(&mut self) -> Result<()> { let terminal = ratatui::init(); self.run(terminal).expect("ui loop failed."); ratatui::restore(); @@ -28,7 +29,7 @@ impl Tui { } fn poll_events() -> Result { - match event::poll(Duration::from_millis(50)).context("event polling failed.")? { + match event::poll(Duration::from_millis(100)).context("event polling failed.")? { true => match event::read().context("event read failed.")? { Event::Key(key) => match key.code { KeyCode::Char('q') => Ok(Message::Exit), @@ -52,11 +53,22 @@ impl Tui { } } - fn draw(&self, frame: &mut Frame) { - frame.render_widget(Paragraph::new("Hello, World"), frame.area()); + fn draw(&mut self, frame: &mut Frame) { + let items_clone = { + let mut_fq = self.server.fq.lock().unwrap(); + mut_fq.clone() + }; + + let list = List::from_iter( + items_clone + .iter() + .map(|fpath| ListItem::new(format!("{}", fpath))), + ); + + frame.render_widget(list.block(Block::new().borders(Borders::ALL)), frame.area()); } - fn run(&self, mut terminal: DefaultTerminal) -> Result<()> { + fn run(&mut self, mut terminal: DefaultTerminal) -> Result<()> { loop { terminal.draw(|f| self.draw(f))?; match self.handle_events() {