aboutsummaryrefslogtreecommitdiff
path: root/module/server/routes.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/server/routes.scm')
-rw-r--r--module/server/routes.scm27
1 files changed, 24 insertions, 3 deletions
diff --git a/module/server/routes.scm b/module/server/routes.scm
index 3c03ae14..8d51fc22 100644
--- a/module/server/routes.scm
+++ b/module/server/routes.scm
@@ -219,6 +219,10 @@
[(get-event-by-uid global-event-object (prop event 'UID))
=> (lambda (old-event)
+ ;; procedure to run after save.
+ ;; used as hook to remove old event from disk below
+ (define after-save (const #f))
+
(if (eq? calendar (parent old-event))
(begin (vcomponent-update! old-event event)
;; for save below
@@ -226,9 +230,25 @@
;; change calendar
(begin
- ;; (remove-from-calendar! old-event)
- ;; TODO remove the old event from disk here
- (remove-event global-event-object old-event)
+
+ (format (current-error-port)
+ "Calendar change~%")
+
+ ;; remove from runtime
+ ((@ (vcomponent instance methods) remove-event)
+ global-event-object old-event)
+
+ ;; Actually puring the old event should be safe,
+ ;; since we first make sure we write the new event to disk.
+ ;; Currently the whole transaction isn't atomic, so a duplicate
+ ;; event can still be created.
+ (set! after-save
+ ;; remove from disk
+ (lambda ()
+ (format (current-error-port)
+ "Unlinking old event from ~a~%"
+ (prop old-event '-X-HNH-FILENAME))
+ ((@ (output vdir) remove-event) old-event)))
(parameterize ((warnings-are-errors #t))
(catch 'warning
@@ -244,6 +264,7 @@
(return (build-response code: 500)
"Saving event to disk failed."))
+ (after-save)
(format (current-error-port)
"Event updated ~a~%" (prop event 'UID)))]