diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs index ce2284d..d531687 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,32 +1,34 @@ extern crate almanac; +extern crate itertools; use std::env; use std::io::BufReader; use std::fs::File; +use itertools::Itertools; use almanac::Calendar; use almanac::Date; use almanac::Duration; -use almanac::Event; fn main() { let first = Date::now(); let last = first + Duration::days(7); - let mut events: Vec<_> = env::args() - .skip(1) - .map(|arg| ics_calendar(&arg, &first, &last)) - .flatten() - .collect(); - events.sort(); + let calendars: Vec<_> = env::args().skip(1).map(|arg| ics_calendar(&arg)).collect(); + let events = calendars + .iter() + .map(|c| c.iter()) + .kmerge() + .skip_while(|e| e.end_date() < first) + .take_while(|e| e.start <= last); + for event in events { println!("{}", event); } } -fn ics_calendar(file_path: &str, first: &Date, last: &Date) -> Vec<Event> { +fn ics_calendar(file_path: &str) -> Calendar { let file = File::open(file_path).unwrap(); let buf = BufReader::new(file); - let calendar = Calendar::parse(buf).unwrap(); - calendar.get(first, last) + Calendar::parse(buf).unwrap() } |