diff options
Diffstat (limited to 'src/actions/select.rs')
-rw-r--r-- | src/actions/select.rs | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/src/actions/select.rs b/src/actions/select.rs deleted file mode 100644 index 05161e2..0000000 --- a/src/actions/select.rs +++ /dev/null @@ -1,86 +0,0 @@ -use std::path::PathBuf; - -use crate::defaults; -use crate::selectors::{SelectFilters,daterange::SelectFilterFrom,daterange::SelectFilterTo}; -use crate::utils::fileutil as utils; -use crate::khline::KhLine; -use crate::KhResult; -use structopt::StructOpt; - -#[derive(Debug, StructOpt)] -pub struct SelectArgs { - /// the arguments for the selection - #[structopt(name = "args")] - pub args: Vec<String>, -} - -impl SelectFilters { - fn predicate_path_skip_while(&self) -> impl Fn(&PathBuf) -> bool + '_ { - move |path| { - let bucketname = match path.file_name() { - Some(path_os_str) => path_os_str.to_string_lossy(), - None => panic!("{:?} not a file", path), - }; - self.from.is_bucket_before(&bucketname) - } - } - - fn predicate_path_take_while<'a>(&'a self) -> impl Fn(&PathBuf) -> bool + 'a { - move |path| { - let bucketname = match path.file_name() { - Some(path_os_str) => path_os_str.to_string_lossy(), - None => panic!("{:?} not a file", path), - }; - self.to.is_bucket_while(&bucketname) - } - } -} - -impl SelectFilterFrom { - fn is_bucket_before(&self, bucketname: &str) -> bool { - self.bucket.as_ref().map_or(false, |bucket| bucketname < bucket.as_str()) - } -} - -impl SelectFilterTo { - fn is_bucket_while(&self, bucketname: &str) -> bool { - self.bucket.as_ref().map_or(true, |bucket| bucketname <= bucket.as_str()) - } -} - -pub fn select_by_args(args: &[&str]) -> KhResult<()> { - let filters = SelectFilters::parse_from_args(args)?; - - let indexdir = defaults::get_indexdir(); - - let mut buckets: Vec<PathBuf> = utils::file_iter(&indexdir) - .collect(); - buckets.sort_unstable(); - let buckets = buckets.into_iter() - .skip_while(filters.predicate_path_skip_while()) - .take_while(filters.predicate_path_take_while()); - - let cals = buckets.map(|bucket| utils::read_lines_from_file(&bucket)) - .filter_map(|lines| lines.ok()) - .flatten() - .map(|line| line.parse::<KhLine>()) - .filter_map(|cal| cal.ok()) - .map(|khline| khline.to_event()) - .flatten() - ; - - let mut lines: Vec<String> = cals - .filter(|event| filters.is_selected(event)) - .map(|event| KhLine::from(&event)) - .map(|khline| khline.to_string()) - .collect(); - - lines.sort_unstable(); - lines.dedup(); - - for line in lines { - println!("{}", line); - } - - Ok(()) -} |