aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/util/instance/methods.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/vcomponent/util/instance/methods.scm')
-rw-r--r--module/vcomponent/util/instance/methods.scm89
1 files changed, 47 insertions, 42 deletions
diff --git a/module/vcomponent/util/instance/methods.scm b/module/vcomponent/util/instance/methods.scm
index 028e01c0..a127ef8d 100644
--- a/module/vcomponent/util/instance/methods.scm
+++ b/module/vcomponent/util/instance/methods.scm
@@ -160,61 +160,66 @@
(prop event 'UID)))
(slot-ref this 'event-set)))
- (hash-set! (slot-ref this 'uid-map) (prop event 'UID)
- #f))
+ (remove-child! (parent event) event)
+ (hash-remove! (slot-ref this 'uid-map) (prop event 'UID)))
-(define-method (add-and-save-event (this <events>) calendar event)
- (cond
- [(get-event-by-uid this (prop event 'UID))
- => (lambda (old-event)
+(define-method (update-and-save-event (this <events>) calendar old-event)
+ ;; remove old instance of event from runtime
+ (remove-event this old-event)
- ;; remove old instance of event from runtime
- (remove-event this old-event)
- (remove-child! (parent old-event) old-event)
+ ;; Add new event to runtime,
+ ;; MUST be done after since the two events SHOULD share UID.
+ ;; NOTE that this can emit warnings
+ (add-event this calendar old-event)
+ (remove-child! (parent old-event) old-event)
- ;; Add new event to runtime,
- ;; MUST be done after since the two events SHOULD share UID.
- ;; NOTE that this can emit warnings
- (add-event this calendar event)
+ (set! (prop old-event 'LAST-MODIFIED)
+ (current-datetime))
- (set! (prop event 'LAST-MODIFIED)
- (current-datetime))
+ ;; NOTE Posibly defer save to a later point.
+ ;; That would allow better asyncronous preformance.
- ;; NOTE Posibly defer save to a later point.
- ;; That would allow better asyncronous preformance.
+ ;; save-event sets -X-HNH-FILENAME from the UID. This is fine
+ ;; since the two events are guaranteed to have the same UID.
+ (unless ((@ (vcomponent formats vdir save-delete) save-event) old-event)
+ (throw 'misc-error "Saving event to disk failed."))
- ;; save-event sets -X-HNH-FILENAME from the UID. This is fine
- ;; since the two events are guaranteed to have the same UID.
- (unless ((@ (vcomponent formats vdir save-delete) save-event) event)
- (throw 'misc-error (_ "Saving event to disk failed.")))
+ (unless (eq? calendar (parent old-event))
+ ;; change to a new calendar
+ (format (current-error-port)
+ "Unlinking old event from ~a~%"
+ (prop old-event '-X-HNH-FILENAME))
+ ;; NOTE that this may fail, leading to a duplicate event being
+ ;; created (since we save beforehand). This is just a minor problem
+ ;; which either a better atomic model, or a propper error
+ ;; recovery log would solve.
+ ((@ (vcomponent formats vdir save-delete) remove-event) old-event))
- (unless (eq? calendar (parent old-event))
- ;; change to a new calendar
- (format (current-error-port)
- (_ "Unlinking old event from ~a~%")
- (prop old-event '-X-HNH-FILENAME))
- ;; NOTE that this may fail, leading to a duplicate event being
- ;; created (since we save beforehand). This is just a minor problem
- ;; which either a better atomic model, or a propper error
- ;; recovery log would solve.
- ((@ (vcomponent formats vdir save-delete) remove-event) old-event))
+ (format (current-error-port)
+ "Event updated ~a~%" (prop old-event 'UID)))
- (format (current-error-port)
- (_ "Event updated ~a~%") (prop event 'UID)))]
- [else
- (add-event this calendar event)
+;; Add a new event, which isn't already in the event object
+(define-method (add-new-event (this <events>) calendar event)
+ (add-event this calendar event)
- (set! (prop event 'LAST-MODIFIED) (current-datetime))
+ (set! (prop event 'LAST-MODIFIED) (current-datetime))
- ;; NOTE Posibly defer save to a later point.
- ;; That would allow better asyncronous preformance.
- (unless ((@ (vcomponent formats vdir save-delete) save-event) event)
- (throw 'misc-error (_ "Saving event to disk failed.")))
+ ;; NOTE Posibly defer save to a later point.
+ ;; That would allow better asyncronous preformance.
+ (unless ((@ (vcomponent formats vdir save-delete) save-event) event)
+ (throw 'misc-error "Saving event to disk failed."))
- (format (current-error-port)
- (_ "Event inserted ~a~%") (prop event 'UID))]))
+ (format (current-error-port)
+ "Event inserted ~a~%" (prop event 'UID))
+ )
+
+(define-method (add-and-save-event (this <events>) calendar event)
+ (cond
+ [(get-event-by-uid this (prop event 'UID))
+ => (lambda (old-event) (update-and-save-event this calendar old-event))]
+ [else (add-new-event this calendar event)]))