Implement occurence getters for calendar object

This commit is contained in:
Lennart
2024-10-08 15:06:45 +02:00
parent f91ed0cb5d
commit dd93afebb3
2 changed files with 19 additions and 5 deletions

View File

@@ -25,7 +25,7 @@ impl EventObject {
} else { } else {
return Ok(None); return Ok(None);
}; };
Ok(Some(CalDateTime::from_str(&dtstart)?)) Ok(Some(CalDateTime::from_str(dtstart)?))
} }
pub fn get_last_occurence(&self) -> Result<Option<CalDateTime>, Error> { pub fn get_last_occurence(&self) -> Result<Option<CalDateTime>, Error> {
@@ -39,7 +39,7 @@ impl EventObject {
value: Some(dtend), .. value: Some(dtend), ..
}) = self.event.get_property("DTEND") }) = self.event.get_property("DTEND")
{ {
return Ok(Some(CalDateTime::from_str(&dtend)?)); return Ok(Some(CalDateTime::from_str(dtend)?));
}; };
let duration = if let Some(Property { let duration = if let Some(Property {
@@ -47,12 +47,12 @@ impl EventObject {
.. ..
}) = self.event.get_property("DURATION") }) = self.event.get_property("DURATION")
{ {
parse_duration(&duration)? parse_duration(duration)?
} else { } else {
Duration::days(1) Duration::days(1)
}; };
let first_occurence = self.get_first_occurence()?; let first_occurence = self.get_first_occurence()?;
return Ok(first_occurence.map(|first_occurence| first_occurence + duration)); Ok(first_occurence.map(|first_occurence| first_occurence + duration))
} }
} }

View File

@@ -1,5 +1,5 @@
use super::{event::EventObject, todo::TodoObject}; use super::{event::EventObject, todo::TodoObject};
use crate::Error; use crate::{timestamp::CalDateTime, Error};
use anyhow::Result; use anyhow::Result;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256}; use sha2::{Digest, Sha256};
@@ -126,4 +126,18 @@ impl CalendarObject {
CalendarObjectComponent::Event(_) => "VEVENT", CalendarObjectComponent::Event(_) => "VEVENT",
} }
} }
pub fn get_first_occurence(&self) -> Result<Option<CalDateTime>, Error> {
match &self.data {
CalendarObjectComponent::Event(event) => event.get_first_occurence(),
_ => Ok(None),
}
}
pub fn get_last_occurence(&self) -> Result<Option<CalDateTime>, Error> {
match &self.data {
CalendarObjectComponent::Event(event) => event.get_last_occurence(),
_ => Ok(None),
}
}
} }