From c9b882edbe2a5971b98e8cfe95080c5034507ba8 Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Fri, 1 Nov 2024 13:34:44 +0100 Subject: [PATCH] [mod] date formatting [mod] caldav resource integration --- source/api/actions/calendar_add.ts | 2 ++ source/api/actions/events.ts | 42 ++++++++++++++++-------------- source/database.ts | 2 +- source/main.ts | 2 ++ source/repositories/resource.ts | 2 ++ source/services/calendar.ts | 13 +++++++-- source/types.ts | 1 + 7 files changed, 42 insertions(+), 22 deletions(-) diff --git a/source/api/actions/calendar_add.ts b/source/api/actions/calendar_add.ts index 949cbdc..cee2aa9 100644 --- a/source/api/actions/calendar_add.ts +++ b/source/api/actions/calendar_add.ts @@ -33,6 +33,7 @@ namespace _zeitbild.api data : { url : string; read_only : boolean; + from_fucked_up_wordpress : boolean; }; } ); @@ -79,6 +80,7 @@ namespace _zeitbild.api "data": { "url": stuff.input.resource.data.url, "read_only": stuff.input.resource.data.read_only, + "from_fucked_up_wordpress": stuff.input.resource.data.from_fucked_up_wordpress, } }; break; diff --git a/source/api/actions/events.ts b/source/api/actions/events.ts index 49130b6..1e1d1fb 100644 --- a/source/api/actions/events.ts +++ b/source/api/actions/events.ts @@ -168,27 +168,31 @@ namespace _zeitbild.api user_id ) .then( - (data) => Promise.resolve({ - "status_code": 200, - "data": ( - data - .map( - (entry) => ({ - "calendar_id": entry.calendar_id, - "calendar_name": entry.calendar_name, - "access_level": _zeitbild.api.access_level_encode(entry.access_level), - "event_id": entry.event_id, - "event_object": entry.event_object, - }) - ) - ), - }) + (data) => Promise.resolve( + { + "status_code": 200, + "data": ( + data + .map( + (entry) => ({ + "calendar_id": entry.calendar_id, + "calendar_name": entry.calendar_name, + "access_level": _zeitbild.api.access_level_encode(entry.access_level), + "event_id": entry.event_id, + "event_object": entry.event_object, + }) + ) + ), + } + ) ) .catch( - (reason) => Promise.resolve({ - "status_code": 403, - "data": String(reason), - }) + (reason) => Promise.resolve( + { + "status_code": 403, + "data": String(reason), + } + ) ) ); } diff --git a/source/database.ts b/source/database.ts index 057d925..858c870 100644 --- a/source/database.ts +++ b/source/database.ts @@ -5,7 +5,7 @@ namespace _zeitbild.database /** */ const _compatible_revisions : Array = [ - "r3", + "r4", ]; diff --git a/source/main.ts b/source/main.ts index 326b563..f30557d 100644 --- a/source/main.ts +++ b/source/main.ts @@ -40,6 +40,7 @@ type type_data = { data : { url : string; read_only : boolean; + from_fucked_up_wordpress ?: boolean; }; } ); @@ -109,6 +110,7 @@ async function data_init( "data": { "url": calendar_raw.resource.data.url, "read_only": calendar_raw.resource.data.read_only, + "from_fucked_up_wordpress": (calendar_raw.resource.data.from_fucked_up_wordpress ?? false), } }; resource_id = await _zeitbild.service.resource.add( diff --git a/source/repositories/resource.ts b/source/repositories/resource.ts index 7a1b871..6bae0ca 100644 --- a/source/repositories/resource.ts +++ b/source/repositories/resource.ts @@ -366,6 +366,7 @@ namespace _zeitbild.repository.resource "data": { "url": dataset_extra_caldav["url"], "read_only": dataset_extra_caldav["read_only"], + "from_fucked_up_wordpress": dataset_extra_caldav["from_fucked_up_wordpress"], } } ); @@ -409,6 +410,7 @@ namespace _zeitbild.repository.resource { "url": resource_object.data.url, "read_only": resource_object.data.read_only, + "from_fucked_up_wordpress": resource_object.data.from_fucked_up_wordpress, } ); const resource_id : _zeitbild.type_resource_id = await get_resource_core_store().create( diff --git a/source/services/calendar.ts b/source/services/calendar.ts index d661e13..8262b68 100644 --- a/source/services/calendar.ts +++ b/source/services/calendar.ts @@ -348,11 +348,20 @@ namespace _zeitbild.service.calendar { } ); - const vcalendar : lib_plankton.ical.type_vcalendar = lib_plankton.ical.ics_decode( - http_response.body.toString(), + const ics_raw : string = http_response.body.toString(); + const vcalendar_list : Array = lib_plankton.ical.ics_decode_multi( + ics_raw, { + "ignore_unhandled_instruction_keys": resource_object.data.from_fucked_up_wordpress, + "from_fucked_up_wordpress": resource_object.data.from_fucked_up_wordpress, } ); + const vcalendar : lib_plankton.ical.type_vcalendar = { + // required + "version": vcalendar_list[0].version, + "prodid": vcalendar_list[0].prodid, + "vevents": vcalendar_list.map(x => x.vevents).reduce((x, y) => x.concat(y), []), + }; return Promise.resolve( vcalendar.vevents .map( diff --git a/source/types.ts b/source/types.ts index f827584..5a269c9 100644 --- a/source/types.ts +++ b/source/types.ts @@ -86,6 +86,7 @@ namespace _zeitbild data : { url : string; read_only : boolean; + from_fucked_up_wordpress : boolean; }; } );