ticker-update: restrict event serialization to keys that are relevant to rrule
This commit is contained in:
parent
1407c5f47a
commit
3aef06aa95
|
@ -1,4 +1,5 @@
|
|||
use std::collections::HashMap;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::fmt::Write;
|
||||
use std::str::FromStr;
|
||||
use chrono::{NaiveDate, NaiveDateTime};
|
||||
|
||||
|
@ -57,20 +58,28 @@ impl<'a> GetValue<'a, Timestamp> for Object {
|
|||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for Object {
|
||||
fn fmt(&self, fmt: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
|
||||
writeln!(fmt, "BEGIN:{}", self.name)?;
|
||||
impl Object {
|
||||
pub fn fmt_rrule(&self) -> Result<String, std::fmt::Error> {
|
||||
let rrule_keys = [
|
||||
"DTSTART",
|
||||
"RRULE", "RDATE",
|
||||
"EXRULE", "EXDATE",
|
||||
].iter().cloned().collect::<HashSet<_>>();
|
||||
|
||||
let mut s = String::new();
|
||||
for (name, values) in &self.content {
|
||||
if ! rrule_keys.contains(name.as_str()) {
|
||||
continue;
|
||||
}
|
||||
for (props, value) in values {
|
||||
write!(fmt, "{}", name)?;
|
||||
write!(s, "{}", name)?;
|
||||
for (key, prop) in props {
|
||||
write!(fmt, ";{}={}", key, prop)?;
|
||||
write!(s, ";{}={}", key, prop)?;
|
||||
}
|
||||
writeln!(fmt, ":{}", value)?;
|
||||
writeln!(s, ":{}", value)?;
|
||||
}
|
||||
}
|
||||
writeln!(fmt, "END:{}", self.name)?;
|
||||
Ok(())
|
||||
Ok(s)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ fn obj_to_events(calendar: String, obj: &Object) -> Vec<Event> {
|
|||
}
|
||||
};
|
||||
|
||||
match RRule::from_str(&format!("{}", obj)) {
|
||||
match RRule::from_str(&obj.fmt_rrule().unwrap()) {
|
||||
Ok(rrule) => {
|
||||
let now = Utc::now();
|
||||
let start = now - Duration::days(RRULE_LOOKBACK);
|
||||
|
@ -75,8 +75,7 @@ fn obj_to_events(calendar: String, obj: &Object) -> Vec<Event> {
|
|||
.map(|dtstart| generate_event(dtstart, true))
|
||||
.collect()
|
||||
}
|
||||
Err(e) => {
|
||||
println!("Error parsing RRULE: {}", e);
|
||||
Err(_) => {
|
||||
vec![generate_event(dtstart, false)]
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue