From 6da61433d9d89b570c186b1836b2573cfa61c93f Mon Sep 17 00:00:00 2001 From: Astro Date: Fri, 11 Oct 2019 21:24:43 +0200 Subject: [PATCH] fix date parsing --- src/ics/mod.rs | 9 +++++++-- src/main.rs | 8 +++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ics/mod.rs b/src/ics/mod.rs index 634302f..b10db49 100644 --- a/src/ics/mod.rs +++ b/src/ics/mod.rs @@ -1,5 +1,5 @@ use std::collections::HashMap; -use chrono::NaiveDateTime; +use chrono::{NaiveDate, NaiveDateTime}; mod tokenizer; mod parser; @@ -33,12 +33,17 @@ impl<'a> GetValue<'a, String> for Object { } // TODO: TZID, offset +// TODO: enum for all day events? impl<'a> GetValue<'a, NaiveDateTime> for Object { fn get(&self, key: &'_ str) -> Option { let s = self.get(key)?; NaiveDateTime::parse_from_str(s, "%Y%m%dT%H%M%SZ") .or_else(|_| NaiveDateTime::parse_from_str(s, "%Y%m%dT%H%M%S")) - .or_else(|_| NaiveDateTime::parse_from_str(s, "%Y%m%d")) + .or_else(|_| + NaiveDate::parse_from_str(s, "%Y%m%d") + .map(|date| date.and_hms(0, 0, 0)) + ) + .map_err(|e| println!("Cannot parse date: {:?}", e)) .ok() } } diff --git a/src/main.rs b/src/main.rs index 8a0c774..4af8993 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,7 +29,7 @@ fn extract_vevent_objs(results: &mut Vec, mut obj: Object) { } } -fn obj_to_event(calendar: String, obj: Object) -> Option { +fn obj_to_event(calendar: String, obj: &Object) -> Option { if obj.name != "VEVENT" { return None; } @@ -155,11 +155,13 @@ impl Resources { let mut objs = vec![]; extract_vevent_objs(&mut objs, obj); for obj in objs { - let dbg = format!("{:?}", obj); if let Some(event) = obj_to_event(cal_opts.url.clone(), &obj) { events.insert(event.id.clone(), event); } else { - println!("ignore {}", dbg); + let dtstart: Option<&str> = obj.get("DTSTART"); + let summary: Option<&str> = obj.get("SUMMARY"); + println!("cannot convert {} {:?} {:?}", + obj.name, dtstart, summary); } } });