Add alphabetical sorting as a fallback

This commit is contained in:
sxyazi 2023-11-25 10:00:04 +08:00
parent e45f0375eb
commit 2cb584e824
No known key found for this signature in database

View file

@ -19,9 +19,7 @@ impl FilesSorter {
return false; return false;
} }
match self.by { let by_alphabetical = |a: &File, b: &File| {
SortBy::None => return false,
SortBy::Alphabetical => items.sort_unstable_by(|a, b| {
if self.sensitive { if self.sensitive {
return self.cmp(&*a.url, &*b.url, self.promote(a, b)); return self.cmp(&*a.url, &*b.url, self.promote(a, b));
} }
@ -31,24 +29,25 @@ impl FilesSorter {
b.url.as_os_str().to_ascii_uppercase(), b.url.as_os_str().to_ascii_uppercase(),
self.promote(a, b), self.promote(a, b),
) )
}), };
match self.by {
SortBy::None => return false,
SortBy::Alphabetical => items.sort_unstable_by(by_alphabetical),
SortBy::Created => items.sort_unstable_by(|a, b| { SortBy::Created => items.sort_unstable_by(|a, b| {
if let (Some(aa), Some(bb)) = (a.created, b.created) { let ord = self.cmp(a.created, b.created, self.promote(a, b));
return self.cmp(aa, bb, self.promote(a, b)); if ord == Ordering::Equal { by_alphabetical(a, b) } else { ord }
}
Ordering::Equal
}), }),
SortBy::Modified => items.sort_unstable_by(|a, b| { SortBy::Modified => items.sort_unstable_by(|a, b| {
if let (Some(aa), Some(bb)) = (a.modified, b.modified) { let ord = self.cmp(a.modified, b.modified, self.promote(a, b));
return self.cmp(aa, bb, self.promote(a, b)); if ord == Ordering::Equal { by_alphabetical(a, b) } else { ord }
}
Ordering::Equal
}), }),
SortBy::Natural => self.sort_naturally(items), SortBy::Natural => self.sort_naturally(items),
SortBy::Size => items.sort_unstable_by(|a, b| { SortBy::Size => items.sort_unstable_by(|a, b| {
let aa = if a.is_dir() { sizes.get(&a.url).copied() } else { None }; let aa = if a.is_dir() { sizes.get(&a.url).copied() } else { None };
let bb = if b.is_dir() { sizes.get(&b.url).copied() } else { None }; let bb = if b.is_dir() { sizes.get(&b.url).copied() } else { None };
self.cmp(aa.unwrap_or(a.len), bb.unwrap_or(b.len), self.promote(a, b)) let ord = self.cmp(aa.unwrap_or(a.len), bb.unwrap_or(b.len), self.promote(a, b));
if ord == Ordering::Equal { by_alphabetical(a, b) } else { ord }
}), }),
} }
true true