mirror of
https://github.com/sreedevk/deduplicator.git
synced 2026-09-07 02:24:24 +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::mpsc::{channel, Receiver, Sender};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::{anyhow, Result};
|
||||||
use threadpool::ThreadPool;
|
use threadpool::ThreadPool;
|
||||||
|
|
||||||
use crate::params::Params;
|
use crate::params::Params;
|
||||||
@@ -29,7 +29,14 @@ impl App {
|
|||||||
|
|
||||||
let server_ptr = self.server.clone();
|
let server_ptr = self.server.clone();
|
||||||
let tui_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 || {
|
self.tpool.execute(move || {
|
||||||
server_ptr.start(server_rx).expect("server init failed");
|
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();
|
self.tpool.join();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
mod file;
|
pub mod file;
|
||||||
mod flags;
|
mod flags;
|
||||||
mod processor;
|
mod processor;
|
||||||
mod scanner;
|
mod scanner;
|
||||||
@@ -26,9 +26,9 @@ pub enum Message {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Server {
|
pub struct Server {
|
||||||
fq: FileQueue,
|
pub fq: FileQueue,
|
||||||
dupstore: Arc<Store>,
|
pub dupstore: Arc<Store>,
|
||||||
tpool: ThreadPool,
|
pub tpool: ThreadPool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Server {
|
impl Server {
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ use std::time::Duration;
|
|||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use ratatui::crossterm::event::{self, Event, KeyCode};
|
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 ratatui::{DefaultTerminal, Frame};
|
||||||
|
|
||||||
|
use crate::server::file::FileMeta;
|
||||||
use crate::server::{Message, Server};
|
use crate::server::{Message, Server};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ impl Tui {
|
|||||||
Self { app_tx, server }
|
Self { app_tx, server }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn start(&self) -> Result<()> {
|
pub fn start(&mut self) -> Result<()> {
|
||||||
let terminal = ratatui::init();
|
let terminal = ratatui::init();
|
||||||
self.run(terminal).expect("ui loop failed.");
|
self.run(terminal).expect("ui loop failed.");
|
||||||
ratatui::restore();
|
ratatui::restore();
|
||||||
@@ -28,7 +29,7 @@ impl Tui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn poll_events() -> Result<Message> {
|
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.")? {
|
true => match event::read().context("event read failed.")? {
|
||||||
Event::Key(key) => match key.code {
|
Event::Key(key) => match key.code {
|
||||||
KeyCode::Char('q') => Ok(Message::Exit),
|
KeyCode::Char('q') => Ok(Message::Exit),
|
||||||
@@ -52,11 +53,22 @@ impl Tui {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(&self, frame: &mut Frame) {
|
fn draw(&mut self, frame: &mut Frame) {
|
||||||
frame.render_widget(Paragraph::new("Hello, World"), frame.area());
|
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 {
|
loop {
|
||||||
terminal.draw(|f| self.draw(f))?;
|
terminal.draw(|f| self.draw(f))?;
|
||||||
match self.handle_events() {
|
match self.handle_events() {
|
||||||
|
|||||||
Reference in New Issue
Block a user