aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs22
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()
}