summaryrefslogtreecommitdiffstats
path: root/src/common.rs
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-03 13:27:17 +0530
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-03 13:27:17 +0530
commit0b3e158085d68ba43dc3ac034ce4f0b5df9d61e8 (patch)
tree589fd99289b18595d05abf67767b63ab78ee9260 /src/common.rs
parentb3dc836baa00e36c56f823e9e5b3e9118fdd8b30 (diff)
Unify sorting to start dealing with selections
Diffstat (limited to 'src/common.rs')
-rw-r--r--src/common.rs21
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 {