summaryrefslogtreecommitdiffstats
path: root/src/preview.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-02-02 17:08:29 +0100
committerrabite <rabite@posteo.de>2019-02-02 17:08:29 +0100
commit1b95fb704f4a1d4674776df638a1a2158144580d (patch)
treefe5bc7eec365af0f24c8bc7bcc219717704c7374 /src/preview.rs
parent23e699234a570c031572bed029ff63b5a2eaed3a (diff)
not quite ready yet
Diffstat (limited to 'src/preview.rs')
-rw-r--r--src/preview.rs85
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()