summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorqkzk <qu3nt1n@gmail.com>2023-01-28 18:39:23 +0100
committerqkzk <qu3nt1n@gmail.com>2023-01-28 18:39:23 +0100
commit7d2ad7ece9036445225423a3a4a0632a9ea55f01 (patch)
tree1554bd646eda75819bf1178a5f88095a30bd3aed /src
parent9a8ac63bda81af752ce7f3a24b3851491189b05e (diff)
refactor tree
Diffstat (limited to 'src')
-rw-r--r--src/preview.rs10
-rw-r--r--src/tab.rs1
-rw-r--r--src/tree.rs25
3 files changed, 28 insertions, 8 deletions
diff --git a/src/preview.rs b/src/preview.rs
index 149bad3..08cbe8a 100644
--- a/src/preview.rs
+++ b/src/preview.rs
@@ -552,6 +552,14 @@ impl Directory {
})
}
+ /// Reset the attributes to default one and free some unused memory.
+ pub fn clear(&mut self) {
+ self.len = 0;
+ self.content = vec![];
+ self.selected_index = 0;
+ self.tree.clear();
+ }
+
/// Number of displayed lines.
pub fn len(&self) -> usize {
self.len
@@ -592,7 +600,7 @@ impl Directory {
self.update_tree_from_index(colors)
}
- fn update_tree_from_index(&mut self, colors: &Colors) -> FmResult<()> {
+ pub fn update_tree_from_index(&mut self, colors: &Colors) -> FmResult<()> {
self.tree.position = self.tree.position_from_index(self.selected_index);
let (_, _, node) = self.tree.select_from_position()?;
self.tree.current_node = node;
diff --git a/src/tab.rs b/src/tab.rs
index 1aaf13c..3e4f98f 100644
--- a/src/tab.rs
+++ b/src/tab.rs
@@ -118,6 +118,7 @@ impl Tab {
self.window.reset(self.path_content.content.len());
self.preview = Preview::new_empty();
self.completion.reset();
+ self.directory.clear();
Ok(())
}
diff --git a/src/tree.rs b/src/tree.rs
index d38594b..957720e 100644
--- a/src/tree.rs
+++ b/src/tree.rs
@@ -90,6 +90,16 @@ impl Node {
pub fn toggle_fold(&mut self) {
self.folded = !self.folded;
}
+
+ fn from_fileinfo(fileinfo: FileInfo, parent_position: Vec<usize>) -> Self {
+ Self {
+ is_dir: matches!(fileinfo.file_kind, FileKind::Directory),
+ fileinfo,
+ position: parent_position,
+ folded: false,
+ index: None,
+ }
+ }
}
/// Holds a recursive view of a directory.
@@ -135,6 +145,13 @@ impl Tree {
)
}
+ /// Clear every vector attributes of the tree.
+ /// It's used to free some unused memory.
+ pub fn clear(&mut self) {
+ self.leaves = vec![];
+ self.position = vec![];
+ }
+
/// A reference to the holded node fileinfo.
pub fn file(&self) -> &FileInfo {
&self.node.fileinfo
@@ -172,13 +189,7 @@ impl Tree {
}
}
}
- let node = Node {
- is_dir: matches!(fileinfo.file_kind, FileKind::Directory),
- fileinfo,
- position: parent_position,
- folded: false,
- index: None,
- };
+ let node = Node::from_fileinfo(fileinfo, parent_position);
let position = vec![0];
let current_node = node.clone();
Ok(Self {