diff options
Diffstat (limited to 'module/vcomponent/recurrence/generate.scm')
-rw-r--r-- | module/vcomponent/recurrence/generate.scm | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/module/vcomponent/recurrence/generate.scm b/module/vcomponent/recurrence/generate.scm index 84025d2f..0ad30c84 100644 --- a/module/vcomponent/recurrence/generate.scm +++ b/module/vcomponent/recurrence/generate.scm @@ -1,4 +1,5 @@ (define-module (vcomponent recurrence generate) + #:use-module ((srfi srfi-1) :select (find)) #:use-module (srfi srfi-19) ; Datetime #:use-module (srfi srfi-19 util) #:use-module (srfi srfi-19 setters) @@ -85,7 +86,20 @@ (stream-unfold ;; Event x Rule → Event - car + (match-lambda + ((e _) + (let ((expected-start (attr e 'DTSTART))) + ;; If we have alternatives, check them + (cond [(attr e 'X-HNH-ALTERNATIVES) + (lambda (alternatives) + ;; A recurrence id matching the expected time means that + ;; we have an actuall alternative/exception, use that + ;; instead of the regular event. + (find (lambda (alt) (time=? expected-start (attr alt 'RECURRENCE-ID))) + alternatives)) + => identity] + ;; If we did't have an exception just return the regular event. + [else e])))) ;; Event x Rule → Bool (continue?) (match-lambda |