This commit is contained in:
Erio-Harrison 2025-02-28 12:15:20 +11:00
parent 9dffc8c5cc
commit 6db25b0d3f
1 changed files with 12 additions and 14 deletions

View File

@ -52,24 +52,22 @@ impl<'a> Stream<'a> {
Some(name) => name, Some(name) => name,
None => return false, None => return false,
}; };
let words: Vec<&str> = basename let words: Vec<&str> = basename
.split(|c| ['-', '_', ' ', '.'].contains(&c)) .split(|c| ['-', '_', ' ', '.'].contains(&c))
.filter(|s| !s.is_empty()) .filter(|s| !s.is_empty())
.collect(); .collect();
if words.len() < 2 { if words.len() < 2 {
return false; return false;
} }
let acronym: String = words.iter().filter_map(|word| word.chars().next()).collect(); let acronym: String = words.iter().filter_map(|word| word.chars().next()).collect();
let acronym_lower = util::to_lowercase(&acronym); let acronym_lower = util::to_lowercase(&acronym);
let user_input: String = keywords.iter() let user_input: String =
.map(String::as_str) keywords.iter().map(String::as_str).chain(std::iter::once(keywords_last)).collect();
.chain(std::iter::once(keywords_last))
.collect();
acronym_lower == util::to_lowercase(&user_input) acronym_lower == util::to_lowercase(&user_input)
} }
@ -78,10 +76,10 @@ impl<'a> Stream<'a> {
Some(split) => split, Some(split) => split,
None => return true, None => return true,
}; };
let path_lower = util::to_lowercase(path); let path_lower = util::to_lowercase(path);
let mut path_str = path_lower.as_str(); let mut path_str = path_lower.as_str();
let mut matched = false; let mut matched = false;
if let Some(idx) = path_str.rfind(keywords_last) { if let Some(idx) = path_str.rfind(keywords_last) {
if path_str[idx + keywords_last.len()..].contains(path::is_separator) { if path_str[idx + keywords_last.len()..].contains(path::is_separator) {
@ -90,18 +88,18 @@ impl<'a> Stream<'a> {
path_str = &path_str[..idx]; path_str = &path_str[..idx];
matched = true; matched = true;
} }
if !matched { if !matched {
return self.match_acronym(path, keywords_last, keywords); return self.match_acronym(path, keywords_last, keywords);
} }
for keyword in keywords.iter().rev() { for keyword in keywords.iter().rev() {
match path_str.rfind(keyword) { match path_str.rfind(keyword) {
Some(idx) => path_str = &path_str[..idx], Some(idx) => path_str = &path_str[..idx],
None => return self.match_acronym(path, keywords_last, keywords), None => return self.match_acronym(path, keywords_last, keywords),
} }
} }
true true
} }