From 1b95fb704f4a1d4674776df638a1a2158144580d Mon Sep 17 00:00:00 2001 From: rabite Date: Sat, 2 Feb 2019 17:08:29 +0100 Subject: [PATCH] not quite ready yet --- src/files.rs | 2 +- src/main.rs | 2 ++ src/preview.rs | 85 +++++++++++++++++++++++++++++++------------------ src/textview.rs | 4 +-- 4 files changed, 59 insertions(+), 34 deletions(-) diff --git a/src/files.rs b/src/files.rs index 93120d1..774ab25 100644 --- a/src/files.rs +++ b/src/files.rs @@ -53,7 +53,7 @@ impl Files { let direntries: Result, _> = std::fs::read_dir(&path)?.collect(); let files: Vec<_> = direntries? - .par_iter() + .iter() .map(|file| { //let file = file?; let name = file.file_name(); diff --git a/src/main.rs b/src/main.rs index 2cf76e0..624bad4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,6 +33,8 @@ fn main() { let mut _screen = AlternateScreen::from(Box::new(stdout())); let mut _stdout = MouseTerminal::from(stdout().into_raw_mode().unwrap()); + + let filebrowser = crate::file_browser::FileBrowser::new().unwrap(); let mut win = Window::new(filebrowser); diff --git a/src/preview.rs b/src/preview.rs index 46bd5fe..bbada42 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -1,3 +1,9 @@ +use rayon as rayon; + +use std::io::{stdout, Write}; +use std::sync::atomic::AtomicUsize; +use std::sync::Mutex; + use crate::coordinates::{Coordinates, Position, Size}; use crate::files::{File, Files, Kind}; use crate::listview::ListView; @@ -8,6 +14,7 @@ pub struct Previewer { pub file: Option, pub buffer: String, pub coordinates: Coordinates, + pub instances: Mutex } impl Previewer { @@ -16,11 +23,55 @@ impl Previewer { file: None, buffer: String::new(), coordinates: Coordinates::new(), + instances: From::from(0) } } pub fn set_file(&mut self, file: &File) { - self.file = Some(file.clone()); - self.refresh(); + //return; + let mut instance = self.instances.try_lock().unwrap(); + if *instance > 2 { return } + *instance = *instance + 1; + let coordinates = self.coordinates.clone(); + let file = file.clone(); + + + + //self.threads.install(|| { + std::thread::spawn(move || { + match &file.kind { + Kind::Directory => match Files::new_from_path(&file.path) { + Ok(files) => { + let len = files.len(); + if len == 0 { return }; + let mut file_list = ListView::new(files); + file_list.set_coordinates(&coordinates); + file_list.refresh(); + write!(std::io::stdout(), + "{}{}", + &file_list.get_drawlist(), + &file_list.get_redraw_empty_list(len)).unwrap(); + + } + Err(err) => { + crate::window::show_status(&format!("Can't preview because: {}", err)); + } + + }, + _ => { + if file.get_mime() == Some("text".to_string()) { + let mut textview = TextView::new_from_file(&file); + textview.set_coordinates(&coordinates); + textview.refresh(); + let len = textview.lines.len(); + let output = textview.get_drawlist() + + &textview.get_redraw_empty_list(len - 1); + write!(std::io::stdout(), "{}", output).unwrap(); + } + + } + } + }); + *instance = *instance - 1; } } @@ -55,35 +106,7 @@ impl Widget for Previewer { return; } - let file = self.file.as_ref().unwrap(); - self.buffer = match &file.kind { - Kind::Directory => match Files::new_from_path(&file.path) { - Ok(files) => { - let len = files.len(); - let mut file_list = ListView::new(files); - file_list.set_size(self.coordinates.size.clone()); - file_list.set_position(self.coordinates.position.clone()); - file_list.refresh(); - file_list.get_drawlist() + &file_list.get_redraw_empty_list(len) - } - Err(err) => { - self.show_status(&format!("Can't preview because: {}", err)); - self.get_clearlist() - } - }, - _ => { - if file.get_mime() == Some("text".to_string()) { - let mut textview = TextView::new_from_file(&file); - textview.set_size(self.coordinates.size.clone()); - textview.set_position(self.coordinates.position.clone()); - textview.refresh(); - let len = textview.lines.len(); - textview.get_drawlist() + &textview.get_redraw_empty_list(len - 1) - } else { - self.get_clearlist() - } - } - }; + } fn get_drawlist(&self) -> String { self.buffer.clone() diff --git a/src/textview.rs b/src/textview.rs index f292e66..f09f368 100644 --- a/src/textview.rs +++ b/src/textview.rs @@ -17,8 +17,8 @@ impl TextView { pub fn new_from_file(file: &File) -> TextView { let file = std::fs::File::open(&file.path).unwrap(); let file = std::io::BufReader::new(file); - let lines = file.lines().take(100).map(|line| line.unwrap()).collect(); - + let lines = file.lines().map(|line| line.unwrap()).collect(); + TextView { lines: lines, buffer: String::new(),