mirror of https://github.com/bobwen-dev/hunter
not quite ready yet
This commit is contained in:
parent
23e699234a
commit
1b95fb704f
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue