diff options
author | rabite <rabite@posteo.de> | 2019-02-02 17:08:29 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-02-02 17:08:29 +0100 |
commit | 1b95fb704f4a1d4674776df638a1a2158144580d (patch) | |
tree | fe5bc7eec365af0f24c8bc7bcc219717704c7374 /src/preview.rs | |
parent | 23e699234a570c031572bed029ff63b5a2eaed3a (diff) |
not quite ready yet
Diffstat (limited to 'src/preview.rs')
-rw-r--r-- | src/preview.rs | 85 |
1 files changed, 54 insertions, 31 deletions
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() |