Skip to content

Commit ee0e797

Browse files
committed
Refactor file and tree rendering
1 parent 1d593d7 commit ee0e797

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

src/app.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use anyhow::Result;
22
use ratatui::widgets::ListState;
33
use signal_hook::{consts::SIGINT, consts::SIGTERM, iterator::Signals};
4-
use std::fs::File;
54
use std::sync::mpsc;
65
use std::thread;
76

src/filesystem.rs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,6 @@ pub struct FileNode {
1212
pub is_directory: bool,
1313
}
1414

15-
impl FileNode {
16-
pub fn display_name(&self) -> String {
17-
let mut display = self.name.clone();
18-
if self.is_symlink {
19-
display = format!("{}@", display)
20-
}
21-
if self.file_type == FileType::Directory {
22-
display = format!("{}/", display)
23-
}
24-
display
25-
}
26-
}
27-
2815
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
2916
pub enum FileType {
3017
Regular, // regular file or symlink to regular file

src/tree.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,36 @@
1+
use ratatui::{
2+
style::{Style, Stylize},
3+
text::{Line, Span},
4+
widgets::ListItem,
5+
};
6+
17
use crate::filesystem::FileNode;
28

39
#[derive(Debug, Clone)]
410
pub struct TreeNode {
5-
pub display_name: String,
611
pub indent: i32,
712
pub relevance: i32,
813
pub file_node: FileNode,
914
}
1015

16+
impl TreeNode {
17+
pub fn render_list_item(&self) -> ListItem {
18+
let display = self.file_node.name.clone();
19+
let mut suffix = String::new();
20+
let mut style = Style::default();
21+
if self.file_node.is_symlink {
22+
suffix = format!("{suffix}@");
23+
style = Style::default().fg(ratatui::style::Color::LightCyan).bold();
24+
}
25+
if self.file_node.is_directory {
26+
suffix = format!("{suffix}/");
27+
style = Style::default().fg(ratatui::style::Color::LightBlue).bold();
28+
}
29+
30+
Line::from(vec![Span::styled(display, style), Span::raw(suffix)]).into()
31+
}
32+
}
33+
1134
pub fn evaluate_relevance(text: &str, words: &Vec<String>) -> i32 {
1235
if words.is_empty() {
1336
return 0;
@@ -35,7 +58,6 @@ pub fn render_tree_nodes(child_nodes: &Vec<FileNode>, filter_text: &str) -> Vec<
3558
let mut current_tree_nodes: Vec<TreeNode> = child_nodes
3659
.iter()
3760
.map(|it: &FileNode| TreeNode {
38-
display_name: it.display_name(),
3961
indent: 0,
4062
relevance: evaluate_relevance(it.lowercase_name.as_str(), &filter_words),
4163
file_node: it.clone(),

src/ui.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ fn render_dir_tree(app: &mut App, frame: &mut Frame, area: Rect) {
4949
let list_items: Vec<ListItem> = app
5050
.child_tree_nodes
5151
.iter()
52-
.map(|it: &TreeNode| ListItem::new(it.display_name.clone()))
52+
.map(|it: &TreeNode| it.render_list_item())
53+
// .map(|it: &TreeNode| ListItem::new(it.display_name()))
5354
.collect();
5455

5556
let title = app.get_current_string_path();

0 commit comments

Comments
 (0)