Ensure list directories first works with all sorting options, fixes #206

This commit is contained in:
Jeremy Soller 2024-05-30 13:19:09 -06:00
parent ac2e129e4d
commit 7a3f9d5666
No known key found for this signature in database
GPG key ID: D02FD439211AF56F

View file

@ -1546,25 +1546,30 @@ impl Tab {
let (a_is_entry, a_size) = get_size(a.1);
let (b_is_entry, b_size) = get_size(b.1);
let ord = match (a_is_entry, b_is_entry) {
//TODO: use folders_first?
match (a_is_entry, b_is_entry) {
(true, false) => Ordering::Less,
(false, true) => Ordering::Greater,
_ => a_size.cmp(&b_size),
};
check_reverse(ord, heading_sort)
_ => check_reverse(a_size.cmp(&b_size), heading_sort),
}
})
}
HeadingOptions::Name => items.sort_by(|a, b| {
let ord = if self.config.folders_first {
if self.config.folders_first {
match (a.1.metadata.is_dir(), b.1.metadata.is_dir()) {
(true, false) => Ordering::Less,
(false, true) => Ordering::Greater,
_ => lexical_sort::natural_lexical_cmp(&a.1.name, &b.1.name),
_ => check_reverse(
lexical_sort::natural_lexical_cmp(&a.1.name, &b.1.name),
heading_sort,
),
}
} else {
lexical_sort::natural_lexical_cmp(&a.1.name, &b.1.name)
};
check_reverse(ord, heading_sort)
check_reverse(
lexical_sort::natural_lexical_cmp(&a.1.name, &b.1.name),
heading_sort,
)
}
}),
HeadingOptions::Modified => {
items.sort_by(|a, b| {
@ -1573,9 +1578,17 @@ impl Tab {
ItemMetadata::Trash { .. } => None,
};
let a = get_modified(a.1);
let b = get_modified(b.1);
check_reverse(a.cmp(&b), heading_sort)
let a_modified = get_modified(a.1);
let b_modified = get_modified(b.1);
if self.config.folders_first {
match (a.1.metadata.is_dir(), b.1.metadata.is_dir()) {
(true, false) => Ordering::Less,
(false, true) => Ordering::Greater,
_ => check_reverse(a_modified.cmp(&b_modified), heading_sort),
}
} else {
check_reverse(a_modified.cmp(&b_modified), heading_sort)
}
});
}
}