mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Better performance
This commit is contained in:
parent
efc7077a13
commit
0b291e7ffd
1 changed files with 31 additions and 23 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
use std::{collections::{BTreeMap, BTreeSet}, ffi::OsStr, mem, ops::Deref, sync::atomic::Ordering};
|
use std::{collections::{BTreeMap, BTreeSet}, mem, ops::Deref, sync::atomic::Ordering};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use tokio::{fs, select, sync::mpsc::{self, UnboundedReceiver}};
|
use tokio::{fs, select, sync::mpsc::{self, UnboundedReceiver}};
|
||||||
|
|
@ -386,35 +386,43 @@ impl Files {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let (hidden, items) = if self.show_hidden {
|
|
||||||
(vec![], mem::take(&mut self.hidden))
|
|
||||||
} else {
|
|
||||||
mem::take(&mut self.hidden).into_iter().partition(|f| f.is_hidden())
|
|
||||||
};
|
|
||||||
|
|
||||||
self.hidden = hidden;
|
|
||||||
if !items.is_empty() {
|
|
||||||
self.items.extend(items);
|
|
||||||
self.sorter.sort(&mut self.items, &self.sizes);
|
|
||||||
}
|
|
||||||
|
|
||||||
if keyword.is_empty() {
|
if keyword.is_empty() {
|
||||||
|
let (hidden, items) = if self.show_hidden {
|
||||||
|
(vec![], mem::take(&mut self.hidden))
|
||||||
|
} else {
|
||||||
|
mem::take(&mut self.hidden).into_iter().partition(|f| f.is_hidden())
|
||||||
|
};
|
||||||
|
|
||||||
|
self.hidden = hidden;
|
||||||
|
if !items.is_empty() {
|
||||||
|
self.items.extend(items);
|
||||||
|
self.sorter.sort(&mut self.items, &self.sizes);
|
||||||
|
}
|
||||||
|
|
||||||
self.filter = None;
|
self.filter = None;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
self.filter = Some(keyword.to_owned());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let keyword = OsStr::new(keyword).to_ascii_lowercase();
|
let keyword = keyword.to_ascii_lowercase();
|
||||||
let keyword = keyword.as_encoded_bytes();
|
let it = mem::take(&mut self.items).into_iter().chain(mem::take(&mut self.hidden));
|
||||||
let (items, hidden): (Vec<_>, Vec<_>) = mem::take(&mut self.items).into_iter().partition(|f| {
|
(self.items, self.hidden) = if self.show_hidden {
|
||||||
f.url.file_name().is_some_and(|s| {
|
it.partition(|f| {
|
||||||
s.to_ascii_lowercase().as_encoded_bytes().windows(keyword.len()).any(|w| w == keyword)
|
f.url
|
||||||
|
.file_name()
|
||||||
|
.is_some_and(|s| s.to_string_lossy().to_ascii_lowercase().contains(&keyword))
|
||||||
})
|
})
|
||||||
});
|
} else {
|
||||||
|
it.partition(|f| {
|
||||||
|
!f.is_hidden()
|
||||||
|
&& f
|
||||||
|
.url
|
||||||
|
.file_name()
|
||||||
|
.is_some_and(|s| s.to_string_lossy().to_ascii_lowercase().contains(&keyword))
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
self.hidden.extend(hidden);
|
self.filter = Some(keyword);
|
||||||
self.items = items;
|
self.sorter.sort(&mut self.items, &self.sizes);
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue