From ff16d94cc56e4729d55936cd8460e1940081f03f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 24 Jul 2020 17:35:09 +0200 Subject: Use X-HNH-REMOVED to "remove" an event. --- module/entry-points/server.scm | 13 +++++++++++-- module/vcomponent.scm | 6 ++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/module/entry-points/server.scm b/module/entry-points/server.scm index 7b323d8e..711119e4 100644 --- a/module/entry-points/server.scm +++ b/module/entry-points/server.scm @@ -113,8 +113,17 @@ "uid required")) (aif (get-event-by-uid uid) - (begin (remove-event it) - (return (build-response code: 204) "")) + (begin + ;; It's hard to properly remove a file. I also want a way to undo accidental + ;; deletions. Therefore I simply save the X-HNH-REMOVED flag to the file, and + ;; then simple don't use those events when loading. + (set! (prop it 'X-HNH-REMOVED) #t) + (set! (param (prop* it 'X-HNH-REMOVED) 'VALUE) "BOOLEAN") + (unless ((@ (output vdir) save-event) it) + (return (build-response code: 500) + "Saving event to disk failed.")) + (remove-event it) + (return (build-response code: 204) "")) (return (build-response code: 400) (format #f "No event with UID '~a'" uid)))) diff --git a/module/vcomponent.scm b/module/vcomponent.scm index 9b5f944c..215ab984 100644 --- a/module/vcomponent.scm +++ b/module/vcomponent.scm @@ -32,8 +32,10 @@ (setf 'events (concatenate ;; TODO does this drop events? - (map (lambda (cal) (filter (lambda (o) (eq? 'VEVENT (type o))) - (children cal))) + (map (lambda (cal) (remove + (extract 'X-HNH-REMOVED) + (filter (lambda (o) (eq? 'VEVENT (type o))) + (children cal)))) (getf 'calendars)))) (let* ((repeating regular (partition repeating? (getf 'events)))) -- cgit v1.2.3