Take into account the DirOrderFlag when doing size sorting

This commit is contained in:
thammin 2019-06-20 17:26:57 +09:00 committed by Abin Simon
parent f1275b0e60
commit ca81a3e4b8

View file

@ -10,9 +10,9 @@ pub fn by_meta(a: &Meta, b: &Meta, flags: &Flags) -> Ordering {
DirOrderFlag::Last => by_name_with_files_first(a, b, &flags),
},
SortFlag::Size => match flags.directory_order {
DirOrderFlag::First => by_size(a, b, flags),
DirOrderFlag::None => by_size(a, b, flags),
DirOrderFlag::Last => by_size(a, b, flags),
DirOrderFlag::First => by_size_with_dirs_first(a, b, &flags),
DirOrderFlag::None => by_size(a, b, &flags),
DirOrderFlag::Last => by_size_with_files_first(a, b, &flags),
},
SortFlag::Time => match flags.directory_order {
DirOrderFlag::First => by_date_with_dirs_first(a, b, &flags),
@ -30,6 +30,24 @@ fn by_size(a: &Meta, b: &Meta, flags: &Flags) -> Ordering {
}
}
fn by_size_with_dirs_first(a: &Meta, b: &Meta, flags: &Flags) -> Ordering {
match (a.file_type, b.file_type) {
(FileType::Directory { .. }, FileType::Directory { .. }) => by_size(a, b, &flags),
(FileType::Directory { .. }, _) => Ordering::Less,
(_, FileType::Directory { .. }) => Ordering::Greater,
_ => by_size(a, b, &flags),
}
}
fn by_size_with_files_first(a: &Meta, b: &Meta, flags: &Flags) -> Ordering {
match (a.file_type, b.file_type) {
(FileType::Directory { .. }, FileType::Directory { .. }) => by_size(a, b, &flags),
(FileType::Directory { .. }, _) => Ordering::Greater,
(_, FileType::Directory { .. }) => Ordering::Less,
_ => by_size(a, b, &flags),
}
}
fn by_name(a: &Meta, b: &Meta, flags: &Flags) -> Ordering {
if flags.sort_order == SortOrder::Default {
a.name.cmp(&b.name)