summaryrefslogtreecommitdiffstats
path: root/src/files.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-06-30 14:53:44 +0200
committerrabite <rabite@posteo.de>2019-06-30 14:53:44 +0200
commit15e2f89a645f14dab7438696d50b1bef945596a3 (patch)
tree434abd51fd0474c24faba41c37f5345fd22bd7d1 /src/files.rs
parentc5e0b6fa03e2a9a824383dd03c940ff093279035 (diff)
filter by file selection
Diffstat (limited to 'src/files.rs')
-rw-r--r--src/files.rs27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/files.rs b/src/files.rs
index a4bbbcc..9d49db2 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -109,6 +109,7 @@ pub struct Files {
pub reverse: bool,
pub show_hidden: bool,
pub filter: Option<String>,
+ pub filter_selected: bool,
pub dirty: DirtyBit,
pub dirty_meta: AsyncDirtyBit,
}
@@ -164,6 +165,7 @@ impl Files {
reverse: false,
show_hidden: true,
filter: None,
+ filter_selected: false,
dirty: dirty,
dirty_meta: dirty_meta,
};
@@ -221,6 +223,7 @@ impl Files {
reverse: false,
show_hidden: true,
filter: None,
+ filter_selected: false,
dirty: dirty,
dirty_meta: dirty_meta,
};
@@ -236,6 +239,7 @@ impl Files {
pub fn get_file_mut(&mut self, index: usize) -> Option<&mut File> {
let filter = self.filter.clone();
+ let filter_selected = self.filter_selected;
let show_hidden = self.show_hidden;
let file = self.files
@@ -243,7 +247,8 @@ impl Files {
.filter(|f|
f.kind == Kind::Placeholder ||
!(filter.is_some() &&
- !f.name.contains(filter.as_ref().unwrap())))
+ !f.name.contains(filter.as_ref().unwrap())) &&
+ (!filter_selected || f.selected))
.filter(|f| !(!show_hidden && f.name.starts_with(".")))
.nth(index);
file
@@ -254,21 +259,25 @@ impl Files {
.iter()
.filter(|f|
f.kind == Kind::Placeholder ||
- (!(self.filter.is_some() &&
- !f.name.contains(self.filter.as_ref().unwrap()))))
+ !(self.filter.is_some() &&
+ !f.name.contains(self.filter.as_ref().unwrap())) &&
+ (!self.filter_selected || f.selected))
.filter(|f| !(!self.show_hidden && f.name.starts_with(".")))
.collect()
}
pub fn get_files_mut(&mut self) -> Vec<&mut File> {
let filter = self.filter.clone();
+ let filter_selected = self.filter_selected;
let show_hidden = self.show_hidden;
+
self.files
.iter_mut()
.filter(|f|
f.kind == Kind::Placeholder ||
!(filter.is_some() &&
- !f.name.contains(filter.as_ref().unwrap())))
+ !f.name.contains(filter.as_ref().unwrap())) &&
+ (!filter_selected || f.selected))
.filter(|f| !(!show_hidden && f.name.starts_with(".")))
.collect()
}
@@ -529,12 +538,20 @@ impl Files {
self.filter.clone()
}
+ pub fn toggle_filter_selected(&mut self) {
+ self.filter_selected = !self.filter_selected;
+ }
+
pub fn len(&self) -> usize {
self.get_files().len()
}
pub fn get_selected(&self) -> Vec<&File> {
- self.files.iter().filter(|f| f.is_selected()).collect()
+ self.get_files()
+ .iter()
+ .filter(|f| f.is_selected())
+ .map(|f| *f)
+ .collect()
}
}