summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorqkzk <qu3nt1n@gmail.com>2023-01-31 20:48:09 +0100
committerqkzk <qu3nt1n@gmail.com>2023-01-31 20:48:09 +0100
commitc3532f7c1629f53ad18c539cfe86cc015959981c (patch)
tree7a76ff51726e8eb2182acbc381680882a4590122 /src
parent8a79377013e60930eb0af68a16e96c19a6abec1c (diff)
some memory improvment
Diffstat (limited to 'src')
-rw-r--r--src/event_exec.rs4
-rw-r--r--src/fileinfo.rs11
-rw-r--r--src/status.rs4
-rw-r--r--src/tree.rs55
4 files changed, 42 insertions, 32 deletions
diff --git a/src/event_exec.rs b/src/event_exec.rs
index 1b39020..cc4a98f 100644
--- a/src/event_exec.rs
+++ b/src/event_exec.rs
@@ -1543,10 +1543,10 @@ impl EventExec {
pub fn exec_tree(status: &mut Status, colors: &Colors) -> FmResult<()> {
let tab = status.selected();
let node = tab.directory.tree.current_node.clone();
- if !node.fileinfo.path.is_dir() {
+ if !node.is_dir {
Self::event_open_file(status)
} else {
- tab.set_pathcontent(&node.fileinfo.path)?;
+ tab.set_pathcontent(&node.filepath())?;
tab.make_tree(colors)?;
Ok(())
}
diff --git a/src/fileinfo.rs b/src/fileinfo.rs
index d4b9bed..0988b6d 100644
--- a/src/fileinfo.rs
+++ b/src/fileinfo.rs
@@ -145,6 +145,17 @@ impl FileInfo {
Self::create_from_metadata_and_filename(path, &metadata, filename.to_owned(), users_cache)
}
+ pub fn from_path(path: &path::Path, users_cache: &UsersCache) -> FmResult<Self> {
+ let metadata = metadata(path)?;
+ let filename = path
+ .file_name()
+ .ok_or_else(|| FmError::custom("from path", "couldn't read filenale"))?
+ .to_str()
+ .ok_or_else(|| FmError::custom("from path", "couldn't parse filenale"))?
+ .to_owned();
+ Self::create_from_metadata_and_filename(path, &metadata, filename, users_cache)
+ }
+
fn create_from_metadata_and_filename(
path: &path::Path,
metadata: &Metadata,
diff --git a/src/status.rs b/src/status.rs
index d3ced23..05ef219 100644
--- a/src/status.rs
+++ b/src/status.rs
@@ -5,7 +5,7 @@ use std::sync::Arc;
use regex::Regex;
use skim::SkimItem;
-use sysinfo::{Disk, DiskExt, System, SystemExt};
+use sysinfo::{Disk, DiskExt, RefreshKind, System, SystemExt};
use tuikit::term::Term;
use users::UsersCache;
@@ -75,7 +75,7 @@ impl Status {
terminal: &str,
) -> FmResult<Self> {
// unsafe because of UsersCache::with_all_users
- let sys = System::new_all();
+ let sys = System::new_with_specifics(RefreshKind::new().with_disks());
let opener = load_opener(OPENER_PATH, terminal).unwrap_or_else(|_| Opener::new(terminal));
let users_cache = unsafe { UsersCache::with_all_users() };
let mut tab = Tab::new(args.clone(), height, users_cache)?;
diff --git a/src/tree.rs b/src/tree.rs
index 2461fb5..a10ad51 100644
--- a/src/tree.rs
+++ b/src/tree.rs
@@ -27,21 +27,16 @@ impl ColoredString {
}
fn from_node(current_node: &Node, colors: &Colors) -> Self {
- let mut text = Self::fold_symbols(current_node);
- text.push_str(&current_node.filename());
- Self::new(text, current_node.attr(colors), current_node.filepath())
- }
-
- fn fold_symbols(current_node: &Node) -> String {
- if current_node.is_dir {
- match current_node.folded {
- true => "▸ ",
- false => "▾ ",
+ let text = if current_node.is_dir {
+ if current_node.folded {
+ format!("▸ {}", &current_node.fileinfo.filename)
+ } else {
+ format!("▾ {}", &current_node.fileinfo.filename)
}
} else {
- ""
- }
- .to_owned()
+ current_node.filename()
+ };
+ Self::new(text, current_node.attr(colors), current_node.filepath())
}
}
@@ -53,7 +48,7 @@ pub struct Node {
pub fileinfo: FileInfo,
pub position: Vec<usize>,
pub folded: bool,
- is_dir: bool,
+ pub is_dir: bool,
index: Option<usize>,
}
@@ -198,24 +193,28 @@ impl Tree {
if max_depth == 0 {
return Ok(vec![]);
}
- let mut leaves = vec![];
let FileKind::Directory = fileinfo.file_kind else { return Ok(vec![]) };
let Some(mut files) =
files_collection(fileinfo, users_cache, display_hidden, filter_kind)
- else { return Ok(leaves) };
+ else { return Ok(vec![]) };
sort_kind.sort(&mut files);
- for (index, fileinfo) in files.iter().enumerate() {
- let mut position = parent_position.clone();
- position.push(files.len() - index - 1);
- leaves.push(Self::create_tree_from_fileinfo(
- fileinfo.to_owned(),
- max_depth - 1,
- users_cache,
- filter_kind,
- display_hidden,
- position,
- )?)
- }
+ let leaves = files
+ .iter()
+ .enumerate()
+ .map(|(index, fileinfo)| {
+ let mut position = parent_position.clone();
+ position.push(files.len() - index - 1);
+ Self::create_tree_from_fileinfo(
+ fileinfo.to_owned(),
+ max_depth - 1,
+ users_cache,
+ filter_kind,
+ display_hidden,
+ position,
+ )
+ .unwrap()
+ })
+ .collect();
Ok(leaves)
}