fix date parsing
This commit is contained in:
parent
e7b024e843
commit
6da61433d9
|
@ -1,5 +1,5 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use chrono::NaiveDateTime;
|
use chrono::{NaiveDate, NaiveDateTime};
|
||||||
|
|
||||||
mod tokenizer;
|
mod tokenizer;
|
||||||
mod parser;
|
mod parser;
|
||||||
|
@ -33,12 +33,17 @@ impl<'a> GetValue<'a, String> for Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: TZID, offset
|
// TODO: TZID, offset
|
||||||
|
// TODO: enum for all day events?
|
||||||
impl<'a> GetValue<'a, NaiveDateTime> for Object {
|
impl<'a> GetValue<'a, NaiveDateTime> for Object {
|
||||||
fn get(&self, key: &'_ str) -> Option<NaiveDateTime> {
|
fn get(&self, key: &'_ str) -> Option<NaiveDateTime> {
|
||||||
let s = self.get(key)?;
|
let s = self.get(key)?;
|
||||||
NaiveDateTime::parse_from_str(s, "%Y%m%dT%H%M%SZ")
|
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%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()
|
.ok()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ fn extract_vevent_objs(results: &mut Vec<Object>, mut obj: Object) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn obj_to_event(calendar: String, obj: Object) -> Option<Event> {
|
fn obj_to_event(calendar: String, obj: &Object) -> Option<Event> {
|
||||||
if obj.name != "VEVENT" {
|
if obj.name != "VEVENT" {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -155,11 +155,13 @@ impl Resources {
|
||||||
let mut objs = vec![];
|
let mut objs = vec![];
|
||||||
extract_vevent_objs(&mut objs, obj);
|
extract_vevent_objs(&mut objs, obj);
|
||||||
for obj in objs {
|
for obj in objs {
|
||||||
let dbg = format!("{:?}", obj);
|
|
||||||
if let Some(event) = obj_to_event(cal_opts.url.clone(), &obj) {
|
if let Some(event) = obj_to_event(cal_opts.url.clone(), &obj) {
|
||||||
events.insert(event.id.clone(), event);
|
events.insert(event.id.clone(), event);
|
||||||
} else {
|
} 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue