app/src/manager/folder.rs: optimize code readability

This commit is contained in:
Integral 2023-09-24 18:04:23 +08:00
parent 10690317cf
commit d5ce555ae6

View file

@ -1,7 +1,13 @@
use core::files::File; use core::files::File;
use config::{MANAGER, THEME}; use config::{MANAGER, THEME};
use ratatui::{buffer::Buffer, layout::Rect, style::{Color, Modifier, Style}, text::{Line, Span}, widgets::{List, ListItem, Widget}}; use ratatui::{
buffer::Buffer,
layout::Rect,
style::{Color, Modifier, Style},
text::{Line, Span},
widgets::{List, ListItem, Widget},
};
use shared::short_path; use shared::short_path;
use crate::Ctx; use crate::Ctx;
@ -75,8 +81,8 @@ impl<'a> Widget for Folder<'a> {
let items: Vec<_> = window let items: Vec<_> = window
.iter() .iter()
.enumerate() .enumerate()
.map(|(i, f)| { .map(|(i, file)| {
let is_selected = self.folder.files.is_selected(f.url()); let is_selected = self.folder.files.is_selected(file.url());
if (!self.is_selection && is_selected) if (!self.is_selection && is_selected)
|| (self.is_selection && mode.pending(self.folder.offset() + i, is_selected)) || (self.is_selection && mode.pending(self.folder.offset() + i, is_selected))
{ {
@ -90,21 +96,21 @@ impl<'a> Widget for Folder<'a> {
); );
} }
let hovered = matches!(self.folder.hovered, Some(ref h) if h.url() == f.url()); let hovered =
let style = if self.is_preview && hovered { matches!(self.folder.hovered, Some(ref hover) if hover.url() == file.url());
THEME.preview.hovered.get()
} else if hovered { let style = match (self.is_preview, hovered) {
THEME.selection.hovered.get() (true, true) => THEME.preview.hovered.get(),
} else { (_, true) => THEME.selection.hovered.get(),
self.file_style(f) _ => self.file_style(file),
}; };
let mut spans = Vec::with_capacity(10); let mut spans = Vec::with_capacity(10);
spans.push(Span::raw(format!(" {} ", Self::icon(f)))); spans.push(Span::raw(format!(" {} ", Self::icon(file))));
spans.push(Span::raw(short_path(f.url(), &self.folder.cwd))); spans.push(Span::raw(short_path(file.url(), &self.folder.cwd)));
if let Some(link_to) = f.link_to() { if let Some(link_to) = file.link_to() {
if MANAGER.show_symlink { if MANAGER.show_symlink {
spans.push(Span::raw(format!(" -> {}", link_to.display()))); spans.push(Span::raw(format!(" -> {}", link_to.display())));
} }
@ -112,8 +118,8 @@ impl<'a> Widget for Folder<'a> {
if let Some(idx) = active if let Some(idx) = active
.finder() .finder()
.filter(|&f| hovered && self.is_find && f.has_matched()) .filter(|&finder| hovered && self.is_find && finder.has_matched())
.and_then(|finder| finder.matched_idx(f.url())) .and_then(|finder| finder.matched_idx(file.url()))
{ {
let len = active.finder().unwrap().matched().len(); let len = active.finder().unwrap().matched().len();
let style = Style::new().fg(Color::Rgb(255, 255, 50)).add_modifier(Modifier::ITALIC); let style = Style::new().fg(Color::Rgb(255, 255, 50)).add_modifier(Modifier::ITALIC);