mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
05964eb26c
commit
4b98c65559
2 changed files with 38 additions and 34 deletions
|
|
@ -13,7 +13,7 @@ pub struct Files {
|
||||||
sizes: BTreeMap<PathBuf, u64>,
|
sizes: BTreeMap<PathBuf, u64>,
|
||||||
selected: BTreeSet<PathBuf>,
|
selected: BTreeSet<PathBuf>,
|
||||||
|
|
||||||
pub sorter: FilesSorter,
|
sorter: FilesSorter,
|
||||||
show_hidden: bool,
|
show_hidden: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -114,36 +114,6 @@ impl Files {
|
||||||
applied
|
applied
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn set_sorter(&mut self, sorter: FilesSorter) -> bool {
|
|
||||||
if self.sorter == sorter {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
self.sorter = sorter;
|
|
||||||
self.sorter.sort(&mut self.items)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn set_show_hidden(&mut self, state: Option<bool>) -> bool {
|
|
||||||
let state = state.unwrap_or(!self.show_hidden);
|
|
||||||
if state == self.show_hidden {
|
|
||||||
return false;
|
|
||||||
} else if state && self.hidden.is_empty() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if state {
|
|
||||||
self.items.append(&mut self.hidden);
|
|
||||||
self.sorter.sort(&mut self.items);
|
|
||||||
} else {
|
|
||||||
let items = mem::take(&mut self.items);
|
|
||||||
(self.hidden, self.items) = items.into_iter().partition(|f| f.is_hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
self.show_hidden = state;
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn update_read(&mut self, mut items: Vec<File>) -> bool {
|
pub fn update_read(&mut self, mut items: Vec<File>) -> bool {
|
||||||
if !self.show_hidden {
|
if !self.show_hidden {
|
||||||
(self.hidden, items) = items.into_iter().partition(|f| f.is_hidden);
|
(self.hidden, items) = items.into_iter().partition(|f| f.is_hidden);
|
||||||
|
|
@ -179,6 +149,7 @@ impl Files {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Files {
|
impl Files {
|
||||||
|
// --- Items
|
||||||
pub fn pick(&self, indices: &BTreeSet<usize>) -> Vec<&File> {
|
pub fn pick(&self, indices: &BTreeSet<usize>) -> Vec<&File> {
|
||||||
let mut items = Vec::with_capacity(indices.len());
|
let mut items = Vec::with_capacity(indices.len());
|
||||||
for (i, item) in self.iter().enumerate() {
|
for (i, item) in self.iter().enumerate() {
|
||||||
|
|
@ -195,6 +166,7 @@ impl Files {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn duplicate(&self, idx: usize) -> Option<File> { self.items.get(idx).cloned() }
|
pub fn duplicate(&self, idx: usize) -> Option<File> { self.items.get(idx).cloned() }
|
||||||
|
|
||||||
|
// --- Selected
|
||||||
pub fn selected(&self, pending: &BTreeSet<usize>, unset: bool) -> Vec<&File> {
|
pub fn selected(&self, pending: &BTreeSet<usize>, unset: bool) -> Vec<&File> {
|
||||||
if self.selected.is_empty() && (unset || pending.is_empty()) {
|
if self.selected.is_empty() && (unset || pending.is_empty()) {
|
||||||
return Default::default();
|
return Default::default();
|
||||||
|
|
@ -224,9 +196,41 @@ impl Files {
|
||||||
}
|
}
|
||||||
self.iter().any(|f| self.selected.contains(&f.path))
|
self.iter().any(|f| self.selected.contains(&f.path))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- Sorter
|
||||||
|
pub fn sorter(&self) -> &FilesSorter { &self.sorter }
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn set_sorter(&mut self, sorter: FilesSorter) -> bool {
|
||||||
|
if self.sorter == sorter {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
self.sorter = sorter;
|
||||||
|
self.sorter.sort(&mut self.items)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Files {
|
// --- Show hidden
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn show_hidden(&self) -> bool { self.show_hidden }
|
pub fn show_hidden(&self) -> bool { self.show_hidden }
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn set_show_hidden(&mut self, state: Option<bool>) -> bool {
|
||||||
|
let state = state.unwrap_or(!self.show_hidden);
|
||||||
|
if state == self.show_hidden {
|
||||||
|
return false;
|
||||||
|
} else if state && self.hidden.is_empty() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if state {
|
||||||
|
self.items.append(&mut self.hidden);
|
||||||
|
self.sorter.sort(&mut self.items);
|
||||||
|
} else {
|
||||||
|
let items = mem::take(&mut self.items);
|
||||||
|
(self.hidden, self.items) = items.into_iter().partition(|f| f.is_hidden);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.show_hidden = state;
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ impl Tasks {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn precache_size(&self, targets: &Files) -> bool {
|
pub fn precache_size(&self, targets: &Files) -> bool {
|
||||||
if targets.sorter.by != SortBy::Size {
|
if targets.sorter().by != SortBy::Size {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue