mirror of
https://github.com/sreedevk/deduplicator.git
synced 2026-08-26 10:05:32 +00:00
render filequeue
This commit is contained in:
13
src/app.rs
13
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(())
|
||||
|
||||
@@ -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<Store>,
|
||||
tpool: ThreadPool,
|
||||
pub fq: FileQueue,
|
||||
pub dupstore: Arc<Store>,
|
||||
pub tpool: ThreadPool,
|
||||
}
|
||||
|
||||
impl Server {
|
||||
|
||||
@@ -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<Message> {
|
||||
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() {
|
||||
|
||||
Reference in New Issue
Block a user