From f1112a3056c3b97dd8f26b59ba094f46e9623784 Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Thu, 7 Sep 2023 19:18:40 +0200 Subject: [PATCH] Add calendar color and description --- crates/dav/src/routes/calendar.rs | 32 ++++++++++++++++++++++++------ crates/dav/src/routes/principal.rs | 15 ++++++++------ crates/store/src/calendar.rs | 2 ++ 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/crates/dav/src/routes/calendar.rs b/crates/dav/src/routes/calendar.rs index 606e569..2c16684 100644 --- a/crates/dav/src/routes/calendar.rs +++ b/crates/dav/src/routes/calendar.rs @@ -110,6 +110,7 @@ pub fn generate_propfind_calendar_response( "getcontenttype", "calendar-description", "owner", + "calendar-color", ] .iter(), ); @@ -141,6 +142,22 @@ pub fn generate_propfind_calendar_response( el.write_empty()?; } } + "calendar-color" => { + let el = writer.create_element("IC:calendar-color"); + if let Some(color) = calendar.clone().color { + el.write_text_content(BytesText::new(&color))?; + } else { + el.write_empty()?; + } + } + "calendar-description" => { + let el = writer.create_element("C:calendar-description"); + if let Some(description) = calendar.clone().description { + el.write_text_content(BytesText::new(&description))?; + } else { + el.write_empty()?; + } + } "supported-calendar-component-set" => { writer .create_element("C:supported-calendar-component-set") @@ -196,12 +213,15 @@ pub async fn route_propfind_calendar( ) .map_err(|_e| Error::InternalError)?; - let output = generate_multistatus(vec![Namespace::Dav, Namespace::CalDAV], |writer| { - writer.write_event(quick_xml::events::Event::Text(BytesText::from_escaped( - responses_string, - )))?; - Ok(()) - }) + let output = generate_multistatus( + vec![Namespace::Dav, Namespace::CalDAV, Namespace::ICal], + |writer| { + writer.write_event(quick_xml::events::Event::Text(BytesText::from_escaped( + responses_string, + )))?; + Ok(()) + }, + ) .map_err(|_e| Error::InternalError)?; Ok(HttpResponse::MultiStatus() diff --git a/crates/dav/src/routes/principal.rs b/crates/dav/src/routes/principal.rs index c1e2fd1..0f3e228 100644 --- a/crates/dav/src/routes/principal.rs +++ b/crates/dav/src/routes/principal.rs @@ -127,12 +127,15 @@ pub async fn route_propfind_principal( .map_err(|_e| Error::InternalError)?, ); - let output = generate_multistatus(vec![Namespace::Dav, Namespace::CalDAV], |writer| { - for response in responses { - writer.write_event(Event::Text(BytesText::from_escaped(response)))?; - } - Ok(()) - }) + let output = generate_multistatus( + vec![Namespace::Dav, Namespace::CalDAV, Namespace::ICal], + |writer| { + for response in responses { + writer.write_event(Event::Text(BytesText::from_escaped(response)))?; + } + Ok(()) + }, + ) .map_err(|_e| Error::InternalError)?; println!("{}", &output); diff --git a/crates/store/src/calendar.rs b/crates/store/src/calendar.rs index 325fda7..caded1a 100644 --- a/crates/store/src/calendar.rs +++ b/crates/store/src/calendar.rs @@ -33,6 +33,8 @@ pub struct Calendar { pub id: String, pub name: Option, pub owner: String, + pub description: Option, + pub color: Option, pub ics: String, }