mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Avoid clone() to allocate unnecessary memory; use byte slices instead of Strings for case-insensitive search
This commit is contained in:
parent
a034168174
commit
efc7077a13
1 changed files with 21 additions and 25 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
use std::{collections::{BTreeMap, BTreeSet}, mem, ops::Deref, sync::atomic::Ordering};
|
use std::{collections::{BTreeMap, BTreeSet}, ffi::OsStr, 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,39 +386,35 @@ impl Files {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let old_hidden: Vec<File>;
|
let (hidden, items) = if self.show_hidden {
|
||||||
if self.show_hidden {
|
(vec![], mem::take(&mut self.hidden))
|
||||||
(self.hidden, old_hidden) = (Vec::new(), self.hidden.clone());
|
|
||||||
} else {
|
} else {
|
||||||
(self.hidden, old_hidden) =
|
mem::take(&mut self.hidden).into_iter().partition(|f| f.is_hidden())
|
||||||
self.hidden.iter().cloned().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() {
|
||||||
self.filter = None;
|
self.filter = None;
|
||||||
|
|
||||||
self.items.extend(old_hidden);
|
|
||||||
self.sorter.sort(&mut self.items, &self.sizes);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
self.filter = Some(keyword.to_owned());
|
self.filter = Some(keyword.to_owned());
|
||||||
|
|
||||||
if !old_hidden.is_empty() {
|
|
||||||
self.items.extend(old_hidden);
|
|
||||||
self.sorter.sort(&mut self.items, &self.sizes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let hidden: Vec<File>;
|
let keyword = OsStr::new(keyword).to_ascii_lowercase();
|
||||||
(hidden, self.items) = self.items.iter().cloned().partition(|f| {
|
let keyword = keyword.as_encoded_bytes();
|
||||||
let Some(filename) = f.url.file_name().and_then(|o| o.to_str()) else {
|
let (items, hidden): (Vec<_>, Vec<_>) = mem::take(&mut self.items).into_iter().partition(|f| {
|
||||||
return true;
|
f.url.file_name().is_some_and(|s| {
|
||||||
};
|
s.to_ascii_lowercase().as_encoded_bytes().windows(keyword.len()).any(|w| w == keyword)
|
||||||
!filename.to_lowercase().contains(&keyword.to_lowercase())
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
self.hidden.extend(hidden);
|
self.hidden.extend(hidden);
|
||||||
|
self.items = items;
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue