mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 19:22:26 +00:00
ical: Remove abstraction structs around journal and todo
This commit is contained in:
@@ -8,7 +8,7 @@ use http::{HeaderValue, Method, StatusCode, header};
|
||||
use ical::generator::{Emitter, IcalCalendarBuilder};
|
||||
use ical::property::Property;
|
||||
use percent_encoding::{CONTROLS, utf8_percent_encode};
|
||||
use rustical_ical::{CalendarObjectComponent, EventObject, JournalObject, TodoObject};
|
||||
use rustical_ical::{CalendarObjectComponent, EventObject};
|
||||
use rustical_store::{CalendarStore, SubscriptionStore, auth::Principal};
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
@@ -83,16 +83,16 @@ pub async fn route_get<C: CalendarStore, S: SubscriptionStore>(
|
||||
ical_calendar_builder.add_event(_override.event.clone());
|
||||
}
|
||||
}
|
||||
CalendarObjectComponent::Todo(TodoObject(todo), overrides) => {
|
||||
CalendarObjectComponent::Todo(todo, overrides) => {
|
||||
ical_calendar_builder = ical_calendar_builder.add_todo(todo.clone());
|
||||
for _override in overrides {
|
||||
ical_calendar_builder = ical_calendar_builder.add_todo(_override.0.clone());
|
||||
ical_calendar_builder = ical_calendar_builder.add_todo(_override.clone());
|
||||
}
|
||||
}
|
||||
CalendarObjectComponent::Journal(JournalObject(journal), overrides) => {
|
||||
CalendarObjectComponent::Journal(journal, overrides) => {
|
||||
ical_calendar_builder = ical_calendar_builder.add_journal(journal.clone());
|
||||
for _override in overrides {
|
||||
ical_calendar_builder = ical_calendar_builder.add_journal(_override.0.clone());
|
||||
ical_calendar_builder = ical_calendar_builder.add_journal(_override.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
use derive_more::From;
|
||||
use ical::parser::ical::component::IcalJournal;
|
||||
|
||||
#[derive(Debug, Clone, From)]
|
||||
pub struct JournalObject(pub IcalJournal);
|
||||
|
||||
impl JournalObject {
|
||||
pub fn get_uid(&self) -> &str {
|
||||
self.0.get_uid()
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,5 @@
|
||||
mod event;
|
||||
mod journal;
|
||||
mod object;
|
||||
mod todo;
|
||||
|
||||
pub use event::*;
|
||||
pub use journal::*;
|
||||
pub use object::*;
|
||||
pub use todo::*;
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
use super::{EventObject, JournalObject, TodoObject};
|
||||
use super::EventObject;
|
||||
use crate::CalDateTime;
|
||||
use crate::Error;
|
||||
use chrono::DateTime;
|
||||
use chrono::Utc;
|
||||
use derive_more::Display;
|
||||
use ical::generator::{Emitter, IcalCalendar};
|
||||
use ical::parser::ical::component::IcalJournal;
|
||||
use ical::parser::ical::component::IcalTimeZone;
|
||||
use ical::parser::ical::component::IcalTodo;
|
||||
use ical::property::Property;
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
@@ -57,8 +59,8 @@ impl rustical_xml::ValueDeserialize for CalendarObjectType {
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum CalendarObjectComponent {
|
||||
Event(EventObject, Vec<EventObject>),
|
||||
Todo(TodoObject, Vec<TodoObject>),
|
||||
Journal(JournalObject, Vec<JournalObject>),
|
||||
Todo(IcalTodo, Vec<IcalTodo>),
|
||||
Journal(IcalJournal, Vec<IcalJournal>),
|
||||
}
|
||||
|
||||
impl CalendarObjectComponent {
|
||||
@@ -82,9 +84,9 @@ impl CalendarObjectComponent {
|
||||
}
|
||||
Ok(Self::Event(main_event, overrides))
|
||||
}
|
||||
fn from_todos(mut todos: Vec<TodoObject>) -> Result<Self, Error> {
|
||||
fn from_todos(mut todos: Vec<IcalTodo>) -> Result<Self, Error> {
|
||||
let main_todo = todos
|
||||
.extract_if(.., |todo| todo.0.get_recurrence_id().is_none())
|
||||
.extract_if(.., |todo| todo.get_recurrence_id().is_none())
|
||||
.next()
|
||||
.expect("there must be one main event");
|
||||
let overrides = todos;
|
||||
@@ -94,7 +96,7 @@ impl CalendarObjectComponent {
|
||||
"Calendar object contains multiple UIDs".to_owned(),
|
||||
));
|
||||
}
|
||||
if todo.0.get_recurrence_id().is_none() {
|
||||
if todo.get_recurrence_id().is_none() {
|
||||
return Err(Error::InvalidData(
|
||||
"Calendar object can only contain one main component".to_owned(),
|
||||
));
|
||||
@@ -102,9 +104,9 @@ impl CalendarObjectComponent {
|
||||
}
|
||||
Ok(Self::Todo(main_todo, overrides))
|
||||
}
|
||||
fn from_journals(mut journals: Vec<JournalObject>) -> Result<Self, Error> {
|
||||
fn from_journals(mut journals: Vec<IcalJournal>) -> Result<Self, Error> {
|
||||
let main_journal = journals
|
||||
.extract_if(.., |journal| journal.0.get_recurrence_id().is_none())
|
||||
.extract_if(.., |journal| journal.get_recurrence_id().is_none())
|
||||
.next()
|
||||
.expect("there must be one main event");
|
||||
let overrides = journals;
|
||||
@@ -114,7 +116,7 @@ impl CalendarObjectComponent {
|
||||
"Calendar object contains multiple UIDs".to_owned(),
|
||||
));
|
||||
}
|
||||
if journal.0.get_recurrence_id().is_none() {
|
||||
if journal.get_recurrence_id().is_none() {
|
||||
return Err(Error::InvalidData(
|
||||
"Calendar object can only contain one main component".to_owned(),
|
||||
));
|
||||
@@ -179,16 +181,9 @@ impl CalendarObject {
|
||||
.collect(),
|
||||
)?
|
||||
} else if !cal.todos.is_empty() {
|
||||
CalendarObjectComponent::from_todos(
|
||||
cal.todos.into_iter().map(|todo| todo.into()).collect(),
|
||||
)?
|
||||
CalendarObjectComponent::from_todos(cal.todos)?
|
||||
} else if !cal.journals.is_empty() {
|
||||
CalendarObjectComponent::from_journals(
|
||||
cal.journals
|
||||
.into_iter()
|
||||
.map(|journal| journal.into())
|
||||
.collect(),
|
||||
)?
|
||||
CalendarObjectComponent::from_journals(cal.journals)?
|
||||
} else {
|
||||
return Err(Error::InvalidData(
|
||||
"iCalendar component type not supported :(".to_owned(),
|
||||
@@ -215,9 +210,9 @@ impl CalendarObject {
|
||||
match &self.data {
|
||||
// We've made sure before that the first component exists and all components share the
|
||||
// same UID
|
||||
CalendarObjectComponent::Todo(todo, _) => todo.0.get_uid(),
|
||||
CalendarObjectComponent::Todo(todo, _) => todo.get_uid(),
|
||||
CalendarObjectComponent::Event(event, _) => event.event.get_uid(),
|
||||
CalendarObjectComponent::Journal(journal, _) => journal.0.get_uid(),
|
||||
CalendarObjectComponent::Journal(journal, _) => journal.get_uid(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
use derive_more::From;
|
||||
use ical::parser::ical::component::IcalTodo;
|
||||
|
||||
#[derive(Debug, Clone, From)]
|
||||
pub struct TodoObject(pub IcalTodo);
|
||||
|
||||
impl TodoObject {
|
||||
pub fn get_uid(&self) -> &str {
|
||||
self.0.get_uid()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user