summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/files.rs2
-rw-r--r--src/main.rs2
-rw-r--r--src/preview.rs85
-rw-r--r--src/textview.rs4
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<Vec<_>, _> = 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<File>,
pub buffer: String,
pub coordinates: Coordinates,
+ pub instances: Mutex<usize>
}
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(),