not quite ready yet

This commit is contained in:
rabite 2019-02-02 17:08:29 +01:00
parent 23e699234a
commit 1b95fb704f
4 changed files with 59 additions and 34 deletions

View File

@ -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();

View File

@ -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);

View File

@ -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()

View File

@ -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(),