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 direntries: Result<Vec<_>, _> = std::fs::read_dir(&path)?.collect();
|
||||||
|
|
||||||
let files: Vec<_> = direntries?
|
let files: Vec<_> = direntries?
|
||||||
.par_iter()
|
.iter()
|
||||||
.map(|file| {
|
.map(|file| {
|
||||||
//let file = file?;
|
//let file = file?;
|
||||||
let name = file.file_name();
|
let name = file.file_name();
|
||||||
|
|
|
@ -33,6 +33,8 @@ fn main() {
|
||||||
let mut _screen = AlternateScreen::from(Box::new(stdout()));
|
let mut _screen = AlternateScreen::from(Box::new(stdout()));
|
||||||
let mut _stdout = MouseTerminal::from(stdout().into_raw_mode().unwrap());
|
let mut _stdout = MouseTerminal::from(stdout().into_raw_mode().unwrap());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let filebrowser = crate::file_browser::FileBrowser::new().unwrap();
|
let filebrowser = crate::file_browser::FileBrowser::new().unwrap();
|
||||||
|
|
||||||
let mut win = Window::new(filebrowser);
|
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::coordinates::{Coordinates, Position, Size};
|
||||||
use crate::files::{File, Files, Kind};
|
use crate::files::{File, Files, Kind};
|
||||||
use crate::listview::ListView;
|
use crate::listview::ListView;
|
||||||
|
@ -8,6 +14,7 @@ pub struct Previewer {
|
||||||
pub file: Option<File>,
|
pub file: Option<File>,
|
||||||
pub buffer: String,
|
pub buffer: String,
|
||||||
pub coordinates: Coordinates,
|
pub coordinates: Coordinates,
|
||||||
|
pub instances: Mutex<usize>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Previewer {
|
impl Previewer {
|
||||||
|
@ -16,11 +23,55 @@ impl Previewer {
|
||||||
file: None,
|
file: None,
|
||||||
buffer: String::new(),
|
buffer: String::new(),
|
||||||
coordinates: Coordinates::new(),
|
coordinates: Coordinates::new(),
|
||||||
|
instances: From::from(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn set_file(&mut self, file: &File) {
|
pub fn set_file(&mut self, file: &File) {
|
||||||
self.file = Some(file.clone());
|
//return;
|
||||||
self.refresh();
|
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;
|
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 {
|
fn get_drawlist(&self) -> String {
|
||||||
self.buffer.clone()
|
self.buffer.clone()
|
||||||
|
|
|
@ -17,8 +17,8 @@ impl TextView {
|
||||||
pub fn new_from_file(file: &File) -> TextView {
|
pub fn new_from_file(file: &File) -> TextView {
|
||||||
let file = std::fs::File::open(&file.path).unwrap();
|
let file = std::fs::File::open(&file.path).unwrap();
|
||||||
let file = std::io::BufReader::new(file);
|
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 {
|
TextView {
|
||||||
lines: lines,
|
lines: lines,
|
||||||
buffer: String::new(),
|
buffer: String::new(),
|
||||||
|
|
Loading…
Reference in New Issue