diff options
author | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-03 13:27:17 +0530 |
---|---|---|
committer | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-03 13:27:17 +0530 |
commit | 0b3e158085d68ba43dc3ac034ce4f0b5df9d61e8 (patch) | |
tree | 589fd99289b18595d05abf67767b63ab78ee9260 /src/common.rs | |
parent | b3dc836baa00e36c56f823e9e5b3e9118fdd8b30 (diff) |
Unify sorting to start dealing with selections
Diffstat (limited to 'src/common.rs')
-rw-r--r-- | src/common.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/common.rs b/src/common.rs index 11f7d7f..5aee23c 100644 --- a/src/common.rs +++ b/src/common.rs @@ -1,7 +1,8 @@ -use crate::interactive::{Tree, TreeIndex}; +use crate::interactive::{widgets::SortMode, EntryData, Tree, TreeIndex}; +use itertools::Itertools; use jwalk::WalkDir; -use std::fmt; -use std::path::Path; +use petgraph::Direction; +use std::{fmt, path::Path}; pub(crate) fn get_size_or_panic(tree: &Tree, node_idx: TreeIndex) -> u64 { tree.node_weight(node_idx) @@ -9,6 +10,20 @@ pub(crate) fn get_size_or_panic(tree: &Tree, node_idx: TreeIndex) -> u64 { .size } +pub(crate) fn sorted_entries( + tree: &Tree, + node_idx: TreeIndex, + sorting: SortMode, +) -> std::vec::IntoIter<(TreeIndex, &EntryData)> { + use SortMode::*; + tree.neighbors_directed(node_idx, Direction::Outgoing) + .filter_map(|idx| tree.node_weight(idx).map(|w| (idx, w))) + .sorted_by(|(_, l), (_, r)| match sorting { + SizeDescending => r.size.cmp(&l.size), + SizeAscending => l.size.cmp(&r.size), + }) +} + /// Specifies a way to format bytes #[derive(Clone, Copy)] pub enum ByteFormat { |